<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-10T00:44:35.322310" rpa="false" schemaversion="5">
<suite id="s1" name="ovsdb-upstream-clustering.txt">
<suite id="s1-s1" name="Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster">
<suite id="s1-s1-s1" name="Ovsdb Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster/010__Ovsdb_Southbound_Cluster.robot">
<kw name="Suite Setup" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.989068" 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-10T00:44:35.984886" elapsed="0.004252"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-10T00:44:35.984403" elapsed="0.004820"/>
</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-10T00:44:35.994226" 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-10T00:44:35.990681" elapsed="0.003578"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-10T00:44:35.994503" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:35.994371" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:35.994338" elapsed="0.000243"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.995182" 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-10T00:44:35.994751" elapsed="0.000479"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.995732" 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-10T00:44:35.995403" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-10T00:44:35.996355" elapsed="0.000298"/>
</kw>
<msg time="2026-04-10T00:44:35.996763" level="INFO">${status} = PASS</msg>
<msg time="2026-04-10T00:44:35.996812" 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-10T00:44:35.995953" elapsed="0.000883"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.997413" 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-10T00:44:35.997023" elapsed="0.000417"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.999157" 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-10T00:44:35.998834" elapsed="0.000353"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:35.999603" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:35.999342" elapsed="0.000287"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.000366" 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-10T00:44:35.999785" elapsed="0.000612"/>
</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-10T00:44:36.002784" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.002588" elapsed="0.000284"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.000463" elapsed="0.002441"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.003519" 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-10T00:44:36.003095" elapsed="0.000471"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.004161" 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-10T00:44:36.003731" elapsed="0.000473"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.004754" 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-10T00:44:36.004366" elapsed="0.000432"/>
</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-10T00:44:35.998361" elapsed="0.006513"/>
</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-10T00:44:35.990309" elapsed="0.014625"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.005123" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.005004" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.004983" elapsed="0.000209"/>
</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-10T00:44:36.008350" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.007959" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.008936" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.008620" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.009010" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:44:36.009188" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.007581" elapsed="0.001633"/>
</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-10T00:44:36.009572" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.009387" elapsed="0.000257"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.009269" elapsed="0.000412"/>
</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-10T00:44:36.005423" elapsed="0.004332"/>
</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-10T00:44:36.009979" elapsed="0.000222"/>
</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-10T00:44:36.010519" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.010382" elapsed="0.000201"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.010256" elapsed="0.000353"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-10T00:44:35.989639" elapsed="0.021026"/>
</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-10T00:44:36.013201" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.013086" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.013066" 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-10T00:44:36.017748" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.017637" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.017618" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.018768" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.018383" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.019268" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.018978" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.019339" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:36.019494" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.018057" elapsed="0.001462"/>
</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-10T00:44:36.019889" 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-10T00:44:36.020136" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.019989" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.019971" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.019732" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.019572" elapsed="0.000689"/>
</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-10T00:44:36.017343" elapsed="0.002973"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-10T00:44:36.011271" elapsed="0.009099"/>
</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-10T00:44:36.010816" elapsed="0.009594"/>
</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-10T00:44:35.984038" elapsed="0.036420"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.021364" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-10T00:44:36.021035" elapsed="0.000356"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-10T00:44:36.021608" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-10T00:44:36.021502" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.021481" elapsed="0.000210"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.021868" elapsed="0.000026"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.022050" elapsed="0.000021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.022226" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.022405" elapsed="0.000020"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.022651" elapsed="0.000024"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-10T00:44:36.020716" elapsed="0.002021"/>
</kw>
<status status="PASS" start="2026-04-10T00:44:35.983609" elapsed="0.039175"/>
</kw>
<test id="s1-s1-s1-t1" name="Check Shards Status Before Fail" line="17">
<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-10T00:44:36.025990" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.025705" 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-10T00:44:36.027293" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.027179" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.027159" 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-10T00:44:36.031966" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.031834" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.031812" elapsed="0.000223"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.033031" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.032632" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.033501" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.033216" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.033572" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:36.033729" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.032258" elapsed="0.001496"/>
</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-10T00:44:36.034121" 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-10T00:44:36.034361" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.034218" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.034201" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.033980" elapsed="0.000480"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.033807" 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-10T00:44:36.031471" elapsed="0.003067"/>
</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-10T00:44:36.026839" elapsed="0.007753"/>
</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-10T00:44:36.026405" elapsed="0.008230"/>
</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-10T00:44:36.023436" elapsed="0.011251"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.058258" elapsed="0.000343"/>
</kw>
<msg time="2026-04-10T00:44:36.058731" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.057218" elapsed="0.001596"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:36.056549" elapsed="0.002400"/>
</kw>
<msg time="2026-04-10T00:44:36.059074" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.046011" elapsed="0.013137"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:36.045599" elapsed="0.013658"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.060358" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.060095" 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-10T00:44:36.065522" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.065138" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.066010" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.065708" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.066082" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:36.066239" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.064751" 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-10T00:44:36.066414" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.067103" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.066736" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.067523" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.067286" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.067945" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.067693" 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-10T00:44:36.068399" 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-10T00:44:36.068648" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.068504" 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-10T00:44:36.068881" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.068727" 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-10T00:44:36.069097" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.068958" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.068486" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.068235" elapsed="0.000959"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.068019" elapsed="0.001200"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:36.069258" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:36.069467" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:36.069514" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:36.064040" elapsed="0.005498"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.070083" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.070161" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.069705" elapsed="0.000480"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.070825" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.070525" elapsed="0.000404">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:36.070301" elapsed="0.000736">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:36.070272" elapsed="0.000798">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.071222" 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-10T00:44:36.071392" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.071458" 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-10T00:44:36.061391" elapsed="0.010181">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:36.061170" elapsed="0.010474">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:36.061032" elapsed="0.010669">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.060624" elapsed="0.011167">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.072041" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.034929" elapsed="0.037230">No leader found.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.022859" elapsed="0.049452">No leader found.</status>
</test>
<test id="s1-s1-s1-t2" name="Start OVS Multiple Connections" line="21">
<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-10T00:44:36.077717" elapsed="0.000229"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.077453" 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-10T00:44:36.079016" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.078884" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.078864" elapsed="0.000221"/>
</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-10T00:44:36.084021" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.083912" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.083893" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.085080" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.084679" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.085550" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.085264" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.085620" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.085773" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.084310" elapsed="0.001487"/>
</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-10T00:44:36.086175" 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-10T00:44:36.086411" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.086271" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.086254" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.086034" elapsed="0.000475"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.085872" 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-10T00:44:36.083535" elapsed="0.003053"/>
</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-10T00:44:36.078579" elapsed="0.008063"/>
</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-10T00:44:36.078151" elapsed="0.008576"/>
</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-10T00:44:36.073016" elapsed="0.013766"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.093644" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.093261" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.094130" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.093828" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.094202" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.094355" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${controller_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.092889" elapsed="0.001490"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.097040" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.096758" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.096739" elapsed="0.000383"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.097468" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.097579" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.097273" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.098240" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.097833" elapsed="0.000454"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.098831" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.098445" elapsed="0.000427"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.099760" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.099836" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.099490" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.100032" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.101209" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.101821" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.100888" elapsed="0.003912">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.104878" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.100516" elapsed="0.004416"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.099102" elapsed="0.005945">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.105223" elapsed="0.000028"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.105400" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.105580" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.106006" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.105965" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.105945" elapsed="0.000124"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.106156" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.106120" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.106105" elapsed="0.000111"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.106246" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.108968" elapsed="0.000320"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.109452" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.109752" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.106602" elapsed="0.003328"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.096181" elapsed="0.013825">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.110062" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.095454" elapsed="0.014655"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.094967" elapsed="0.015240">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.110386" elapsed="0.000024"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:44:36.094578" elapsed="0.015920">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.110659" elapsed="0.000021"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.110952" elapsed="0.000023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.111125" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.110790" elapsed="0.000384"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.110728" elapsed="0.000473"/>
</for>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.111386" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.111564" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.111736" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.111914" elapsed="0.000021"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.112141" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.112317" elapsed="0.000020"/>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.112387" elapsed="0.000017"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.090735" elapsed="0.021752">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.112672" elapsed="0.000021"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.072532" elapsed="0.040299">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10T00:44:36.116369" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.116110" 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-10T00:44:36.117694" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.117582" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.117562" 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-10T00:44:36.122318" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.122211" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.122193" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.123452" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.123065" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.123941" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.123635" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.124011" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.124164" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.122604" elapsed="0.001585"/>
</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-10T00:44:36.124526" 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-10T00:44:36.124762" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.124621" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.124604" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.124388" elapsed="0.000487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.124240" elapsed="0.000660"/>
</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-10T00:44:36.121852" 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-10T00:44:36.117292" elapsed="0.007713"/>
</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-10T00:44:36.116781" elapsed="0.008268"/>
</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-10T00:44:36.113634" elapsed="0.011465"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:36.135990" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.132372" elapsed="0.003657">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.136199" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.136384" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.136553" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.136717" elapsed="0.000020"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.113057" elapsed="0.023822">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t4" name="Create Bridge Manually and Verify Before Fail" 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-10T00:44:36.140619" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.140363" 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-10T00:44:36.141934" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.141803" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.141785" 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-10T00:44:36.146531" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.146424" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.146407" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.147599" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.147222" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.148084" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.147782" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.148154" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:36.148307" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.146822" 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-10T00:44:36.148715" 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-10T00:44:36.148975" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.148812" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.148795" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.148576" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.148424" 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-10T00:44:36.146068" elapsed="0.003081"/>
</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-10T00:44:36.141455" elapsed="0.007748"/>
</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-10T00:44:36.141042" elapsed="0.008205"/>
</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-10T00:44:36.137928" elapsed="0.011369"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.157097" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.156808" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.156790" elapsed="0.000387"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.157470" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.157574" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.157321" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.158154" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.157754" elapsed="0.000446"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.158721" level="INFO">${conn_id} = 3</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.158354" elapsed="0.000393"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.159807" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.159902" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.159532" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.160084" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.161270" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.161530" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.160950" elapsed="0.001086">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.162093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.160576" elapsed="0.001566"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.158991" elapsed="0.003253">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.162412" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.162579" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.162756" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.162894" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.162839" elapsed="0.000120"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.162821" elapsed="0.000160"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.163100" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.163033" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.163018" elapsed="0.000146"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.163194" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.165748" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.166235" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.166530" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.163504" elapsed="0.003177"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.156288" elapsed="0.010466">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.166809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.155724" elapsed="0.011161"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.155235" elapsed="0.011762">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.167190" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.167383" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.167576" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.167775" elapsed="0.000020"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.153175" elapsed="0.014735">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.137148" elapsed="0.030896">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t5" name="Add Port Manually and Verify Before Fail" line="40">
<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-10T00:44:36.171381" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.171124" elapsed="0.000517"/>
</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-10T00:44:36.172627" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.172517" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.172499" 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-10T00:44:36.177503" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.177397" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.177379" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.178567" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.178182" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.179062" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.178748" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.179132" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.179285" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.177788" 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-10T00:44:36.179647" 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-10T00:44:36.179945" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.179779" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.179761" elapsed="0.000262"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.179508" elapsed="0.000539"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.179360" 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-10T00:44:36.177040" elapsed="0.003084"/>
</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-10T00:44:36.172234" elapsed="0.007945"/>
</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-10T00:44:36.171792" elapsed="0.008431"/>
</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-10T00:44:36.168783" elapsed="0.011490"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.188124" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.187815" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.187797" elapsed="0.000411"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.188492" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.188596" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.188353" elapsed="0.000269"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.189165" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.188768" elapsed="0.000443"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.189936" level="INFO">${conn_id} = 5</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.189366" elapsed="0.000597"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.190860" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.190959" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.190561" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.191139" elapsed="0.000360"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.192355" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.192608" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.192042" elapsed="0.001029">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.193128" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.191670" elapsed="0.001506"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.190175" elapsed="0.003107">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.193449" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.193618" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.193789" elapsed="0.001591"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.195500" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.195457" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.195438" elapsed="0.000128"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.195656" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.195619" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.195603" elapsed="0.000114"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.195747" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.198314" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.198786" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.199116" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.196117" elapsed="0.003150"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.187297" elapsed="0.012044">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.199398" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.186717" elapsed="0.012726"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.186225" elapsed="0.013313">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.199722" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.199927" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.200118" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.200316" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.184201" elapsed="0.016229">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.168245" elapsed="0.032317">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t6" name="Create Tap Device Before Fail" line="44">
<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-10T00:44:36.203759" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.203501" 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-10T00:44:36.205006" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.204895" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.204875" 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-10T00:44:36.209705" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.209598" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.209580" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.210748" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.210370" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.211314" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.211024" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.211385" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.211539" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.210003" 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-10T00:44:36.211917" 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-10T00:44:36.212155" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.212014" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.211997" elapsed="0.000273"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.211763" elapsed="0.000530"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.211615" 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-10T00:44:36.209240" elapsed="0.003131"/>
</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-10T00:44:36.204597" elapsed="0.007828"/>
</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-10T00:44:36.204184" elapsed="0.008283"/>
</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-10T00:44:36.201248" elapsed="0.011268"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.215381" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.215115" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.215096" elapsed="0.000365"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.215742" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.215868" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.215606" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.216434" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.216052" elapsed="0.000428"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.217012" level="INFO">${conn_id} = 7</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.216635" elapsed="0.000403"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.217913" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.217990" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.217634" elapsed="0.000380"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.218168" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.219372" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.219605" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.219058" elapsed="0.000985">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.220098" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.218649" elapsed="0.001498"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.217248" elapsed="0.002998">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.220413" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.220582" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.220753" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.220892" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.220836" elapsed="0.000098"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.220818" elapsed="0.000137"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.221040" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.221006" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.220991" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.221128" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.223639" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.224163" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.224458" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.221435" elapsed="0.003173"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.214397" elapsed="0.010286">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.224737" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.213675" elapsed="0.011107"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.213165" elapsed="0.011730">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.225099" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.225306" elapsed="0.000022"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.225510" elapsed="0.000022"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.212725" elapsed="0.012892">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:44:36.200763" elapsed="0.024982">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t7" name="Add Tap Device Manually and Verify Before Fail" 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-10T00:44:36.229025" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.228739" 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-10T00:44:36.230252" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.230142" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.230124" 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-10T00:44:36.235065" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.234956" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.234935" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.236114" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.235719" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.236579" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.236295" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.236649" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:36.236800" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.235351" elapsed="0.001474"/>
</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-10T00:44:36.237185" 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-10T00:44:36.237420" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.237280" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.237264" elapsed="0.000230"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.237047" elapsed="0.000470"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.236894" elapsed="0.000647"/>
</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-10T00:44:36.234557" elapsed="0.003035"/>
</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-10T00:44:36.229859" elapsed="0.007788"/>
</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-10T00:44:36.229432" elapsed="0.008294"/>
</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-10T00:44:36.226530" elapsed="0.011257"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.245518" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.245257" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.245239" elapsed="0.000359"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.245886" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.245991" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.245741" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.246540" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.246165" elapsed="0.000421"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.247242" level="INFO">${conn_id} = 9</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.246885" elapsed="0.000383"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.248299" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.248377" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.248033" elapsed="0.000368"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.248560" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.249730" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.249973" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.249418" elapsed="0.000972">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.250445" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.249062" elapsed="0.001432"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.247476" elapsed="0.003119">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.250762" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.250998" elapsed="0.000023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.251175" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.251298" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.251259" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.251241" elapsed="0.000120"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.251446" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.251411" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.251397" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.251535" elapsed="0.000012"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.254058" elapsed="0.000302"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.254518" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.254806" elapsed="0.000129"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.251854" elapsed="0.003132"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.244721" elapsed="0.010337">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.255147" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.244184" elapsed="0.011010"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.243680" elapsed="0.011610">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.255476" elapsed="0.000021"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.255666" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.255872" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.256072" elapsed="0.000020"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.241638" elapsed="0.014548">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.225957" elapsed="0.030358">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t8" name="Delete the Bridge Manually and Verify Before Fail" line="52">
<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-10T00:44:36.259469" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.259210" elapsed="0.000519"/>
</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-10T00:44:36.260728" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.260618" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.260599" 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-10T00:44:36.265970" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.265519" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.265501" elapsed="0.000540"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.267109" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.266685" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.267585" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.267295" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.267656" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:36.267811" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.266310" 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-10T00:44:36.268201" 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-10T00:44:36.268453" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.268309" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.268289" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.268061" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.267906" 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-10T00:44:36.265157" elapsed="0.003471"/>
</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-10T00:44:36.260328" elapsed="0.008354"/>
</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-10T00:44:36.259895" elapsed="0.008830"/>
</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-10T00:44:36.257090" elapsed="0.011691"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.276803" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.276537" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.276517" elapsed="0.000385"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.277270" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:36.277379" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.277050" elapsed="0.000356"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.277962" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:36.277556" elapsed="0.000453"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.278522" level="INFO">${conn_id} = 11</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.278165" elapsed="0.000383"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.279456" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:36.279536" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:36.279192" elapsed="0.000368"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.279716" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:36.280940" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:36.281163" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.280600" elapsed="0.000985">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.281642" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.280219" elapsed="0.001474"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.278760" elapsed="0.003034">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.282002" elapsed="0.000026"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.282194" elapsed="0.000027"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.282381" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.282660" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.282618" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.282448" elapsed="0.000279"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.282815" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.282780" elapsed="0.000107"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.282765" elapsed="0.000149"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.282946" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:36.285490" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.285998" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:36.286318" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:36.283260" elapsed="0.003212"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.276000" elapsed="0.010593">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:36.286656" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.275442" elapsed="0.011262"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.274902" elapsed="0.011981">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.287080" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:36.287275" elapsed="0.000020"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.272740" elapsed="0.014653">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.256518" elapsed="0.031012">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t9" name="Create Bridge In Owner and Verify Before Fail" line="56">
<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-10T00:44:36.290677" elapsed="0.000242"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.290419" elapsed="0.000556"/>
</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-10T00:44:36.291960" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.291827" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.291808" elapsed="0.000230"/>
</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-10T00:44:36.296615" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.296508" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.296489" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.297966" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.297297" elapsed="0.000697"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.298443" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.298154" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.298513" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:36.298668" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.296926" elapsed="0.001767"/>
</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-10T00:44:36.299083" 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-10T00:44:36.299331" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.299189" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.299172" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.298941" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.298745" elapsed="0.000709"/>
</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-10T00:44:36.296134" elapsed="0.003372"/>
</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-10T00:44:36.291540" 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-10T00:44:36.291123" elapsed="0.008480"/>
</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-10T00:44:36.288348" elapsed="0.011314"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:36.311414" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.307717" elapsed="0.003736">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.287760" elapsed="0.023825">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t10" name="Create Port In Owner and Verify Before Fail" line="60">
<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-10T00:44:36.314559" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.314304" elapsed="0.000518"/>
</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-10T00:44:36.315879" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.315754" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.315735" 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-10T00:44:36.320576" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.320469" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.320451" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.321637" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.321257" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.322131" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.321820" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.322202" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:36.322356" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.320889" elapsed="0.001491"/>
</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-10T00:44:36.322720" 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-10T00:44:36.323011" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.322817" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.322799" elapsed="0.000289"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.322584" elapsed="0.000528"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.322432" 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-10T00:44:36.320110" elapsed="0.003076"/>
</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-10T00:44:36.315470" elapsed="0.007770"/>
</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-10T00:44:36.315050" elapsed="0.008241"/>
</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-10T00:44:36.312305" elapsed="0.011037"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:36.335331" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.331373" elapsed="0.004001">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.311773" elapsed="0.023738">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t11" name="Modify the destination IP of Port In Owner Before Fail" 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-10T00:44:36.338484" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.338214" 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-10T00:44:36.339759" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.339649" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.339630" 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-10T00:44:36.344445" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.344339" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.344320" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.345498" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.345125" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.345981" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.345680" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.346052" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:36.346203" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.344740" elapsed="0.001487"/>
</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-10T00:44:36.346605" 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-10T00:44:36.346887" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.346703" elapsed="0.000240"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.346686" elapsed="0.000281"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.346465" elapsed="0.000525"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.346316" 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-10T00:44:36.343959" 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-10T00:44:36.339362" elapsed="0.007759"/>
</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-10T00:44:36.338944" elapsed="0.008221"/>
</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-10T00:44:36.336223" elapsed="0.010993"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:36.355049" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.351269" elapsed="0.003819">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.335702" elapsed="0.019518">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t12" name="Verify Port Is Modified Before Fail" line="68">
<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-10T00:44:36.358348" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:36.358091" elapsed="0.000517"/>
</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-10T00:44:36.359613" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.359506" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.359488" 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-10T00:44:36.364310" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:36.364203" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:36.364185" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.365370" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:36.364991" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.365840" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:36.365554" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:36.365933" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:36.366085" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:36.364601" elapsed="0.001508"/>
</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-10T00:44:36.366444" 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-10T00:44:36.366689" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:36.366548" elapsed="0.000241"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:36.366530" elapsed="0.000282"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:36.366307" elapsed="0.000557"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:36.366162" elapsed="0.000727"/>
</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-10T00:44:36.363837" elapsed="0.003104"/>
</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-10T00:44:36.359224" elapsed="0.007771"/>
</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-10T00:44:36.358756" elapsed="0.008284"/>
</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-10T00:44:36.355890" elapsed="0.011201"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:44:36.373326" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:44:36.372978" elapsed="0.000376"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:36.385463" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.381710" elapsed="0.003791">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:37.403427" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:37.399562" elapsed="0.003923">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:38.424535" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:38.420604" elapsed="0.003985">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:39.442059" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:39.438203" elapsed="0.003911">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:40.461760" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:40.456358" elapsed="0.005474">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:44:41.482985" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.478778" elapsed="0.004262">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:44:41.483163" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:44:36.373539" elapsed="5.109802">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.371004" elapsed="5.112478">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:36.355407" elapsed="5.128237">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t13" name="Delete Port In Owner Before Fail" line="72">
<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-10T00:44:41.486740" elapsed="0.000284"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.486475" 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-10T00:44:41.488135" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.487998" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.487974" 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-10T00:44:41.493016" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.492905" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.492887" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.494098" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.493682" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.494676" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.494375" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.494750" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:41.494927" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.493308" 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-10T00:44:41.495308" 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-10T00:44:41.495548" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.495407" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.495389" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.495168" elapsed="0.000480"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.495010" 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-10T00:44:41.492526" elapsed="0.003200"/>
</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-10T00:44:41.487684" elapsed="0.008096"/>
</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-10T00:44:41.487233" elapsed="0.008590"/>
</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-10T00:44:41.484453" elapsed="0.011439"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.507351" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.503515" elapsed="0.003878">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.483906" elapsed="0.023630">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t14" name="Delete Bridge In Owner And Verify Before Fail" line="76">
<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-10T00:44:41.510673" elapsed="0.000291"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.510412" elapsed="0.000611"/>
</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-10T00:44:41.512115" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.511991" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.511970" 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-10T00:44:41.518797" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.518629" elapsed="0.000256"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.518603" elapsed="0.000315"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.520368" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.519801" elapsed="0.000607"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.521098" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.520665" elapsed="0.000471"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.521200" elapsed="0.000042"/>
</return>
<msg time="2026-04-10T00:44:41.521417" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.519267" elapsed="0.002185"/>
</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-10T00:44:41.521965" 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-10T00:44:41.522301" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.522103" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.522079" elapsed="0.000327"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.521746" elapsed="0.000692"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.521528" elapsed="0.000943"/>
</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-10T00:44:41.518127" elapsed="0.004481"/>
</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-10T00:44:41.511648" elapsed="0.011037"/>
</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-10T00:44:41.511204" elapsed="0.011541"/>
</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-10T00:44:41.508292" elapsed="0.014524"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.535207" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.531429" elapsed="0.003818">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.507736" elapsed="0.027647">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t15" name="Kill Owner Instance" 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-10T00:44:41.538319" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.538061" 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-10T00:44:41.539595" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.539485" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.539467" 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-10T00:44:41.544241" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.544133" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.544115" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.545326" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.544945" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.546120" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.545511" elapsed="0.000638"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.546199" elapsed="0.000046"/>
</return>
<msg time="2026-04-10T00:44:41.546386" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.544558" elapsed="0.001854"/>
</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-10T00:44:41.546761" 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-10T00:44:41.547017" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.546873" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.546839" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.546621" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.546471" 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-10T00:44:41.543763" elapsed="0.003462"/>
</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-10T00:44:41.539205" elapsed="0.008074"/>
</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-10T00:44:41.538773" elapsed="0.008550"/>
</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-10T00:44:41.536021" elapsed="0.011353"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:44:41.553372" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</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-10T00:44:41.547616" elapsed="0.005796">Variable '${original_owner}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<arg>${original_candidate_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.553585" elapsed="0.000022"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-04-10T00:44:41.535575" elapsed="0.018158">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t16" name="Check Shards Status After Fail" line="85">
<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-10T00:44:41.556753" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.556495" 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-10T00:44:41.558010" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.557896" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.557876" 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-10T00:44:41.562570" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.562465" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.562447" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.563615" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.563238" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.564101" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.563798" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.564172" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:41.564339" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.562870" elapsed="0.001497"/>
</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-10T00:44:41.564730" 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-10T00:44:41.564986" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.564826" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.564810" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.564589" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.564435" elapsed="0.000676"/>
</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-10T00:44:41.562112" 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-10T00:44:41.557596" elapsed="0.007622"/>
</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-10T00:44:41.557186" elapsed="0.008076"/>
</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-10T00:44:41.554492" elapsed="0.010822"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.569398" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.565509" elapsed="0.003929">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.553938" elapsed="0.015631">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t17" name="Check Entity Owner Status And Find Owner and Candidate After Fail" 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-10T00:44:41.572766" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.572510" 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-10T00:44:41.574006" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.573897" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.573878" 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-10T00:44:41.578791" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.578682" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.578663" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.579870" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.579473" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.580346" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.580057" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.580455" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:41.580653" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.579100" elapsed="0.001578"/>
</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-10T00:44:41.581051" 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-10T00:44:41.581323" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.581162" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.581144" elapsed="0.000258"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.580905" elapsed="0.000521"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.580730" elapsed="0.000723"/>
</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-10T00:44:41.578318" elapsed="0.003192"/>
</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-10T00:44:41.573598" elapsed="0.007971"/>
</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-10T00:44:41.573191" elapsed="0.008426"/>
</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-10T00:44:41.570324" elapsed="0.011461"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.592898" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_candidate}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.589156" elapsed="0.003782">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.593117" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.593297" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.593462" elapsed="0.000020"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.569757" elapsed="0.023846">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t18" name="Create Bridge Manually and Verify After Fail" line="99">
<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-10T00:44:41.596755" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.596499" 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-10T00:44:41.597992" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.597883" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.597864" 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-10T00:44:41.602644" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.602538" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.602520" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.603693" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.603318" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.604178" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.603890" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.604249" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.604401" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.602947" 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-10T00:44:41.604786" 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-10T00:44:41.605041" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.604898" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.604881" elapsed="0.000271"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.604647" elapsed="0.000529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.604500" 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-10T00:44:41.602178" elapsed="0.003074"/>
</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-10T00:44:41.597587" elapsed="0.007718"/>
</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-10T00:44:41.597180" elapsed="0.008168"/>
</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-10T00:44:41.594362" elapsed="0.011036"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.613295" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.609232" elapsed="0.004102">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.593788" elapsed="0.019679">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t19" name="Add Port Manually and Verify After Fail" 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-10T00:44:41.616637" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.616347" 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-10T00:44:41.617875" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.617752" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.617734" 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-10T00:44:41.622478" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.622373" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.622355" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.623519" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.623146" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.624004" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.623703" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.624075" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.624225" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.622762" elapsed="0.001487"/>
</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-10T00:44:41.624599" 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-10T00:44:41.624835" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.624694" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.624677" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.624459" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.624300" elapsed="0.000672"/>
</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-10T00:44:41.622015" elapsed="0.003007"/>
</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-10T00:44:41.617472" elapsed="0.007603"/>
</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-10T00:44:41.617063" elapsed="0.008058"/>
</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-10T00:44:41.614190" elapsed="0.010984"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.632820" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.629041" elapsed="0.003829">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.613656" elapsed="0.019347">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t20" name="Create Tap Device After Fail" line="107">
<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-10T00:44:41.636097" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.635822" 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-10T00:44:41.637360" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.637253" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.637235" 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-10T00:44:41.642277" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.642168" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.642148" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.643341" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.642960" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.643816" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.643527" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.643905" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:41.644059" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.642570" 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-10T00:44:41.644446" 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-10T00:44:41.644687" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.644545" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.644528" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.644290" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.644141" elapsed="0.000669"/>
</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-10T00:44:41.641499" elapsed="0.003381"/>
</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-10T00:44:41.636967" elapsed="0.007974"/>
</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-10T00:44:41.636535" elapsed="0.008459"/>
</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-10T00:44:41.633670" elapsed="0.011383"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.647521" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.647246" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.647227" elapsed="0.000375"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:41.647937" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:44:41.648044" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:44:41.647749" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.648628" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:41.648219" elapsed="0.000457"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:44:41.649220" level="INFO">${conn_id} = 13</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:41.648832" elapsed="0.000414"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.650312" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:41.650391" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:41.650016" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:41.650610" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:44:41.651790" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:44:41.652105" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.651473" elapsed="0.001148">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:41.652682" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.651118" elapsed="0.001616"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.649460" elapsed="0.003380">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.653032" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.653206" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.653384" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.653512" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.653471" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.653452" elapsed="0.000124"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.653665" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.653629" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.653613" elapsed="0.000114"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.653759" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:41.656442" elapsed="0.000309"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:44:41.656929" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:44:41.657225" elapsed="0.000105"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:44:41.654093" elapsed="0.003289"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.646701" elapsed="0.010753">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:44:41.657509" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.646161" elapsed="0.011392"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.645658" elapsed="0.011991">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.657867" elapsed="0.000026"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.658081" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.658286" elapsed="0.000023"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.645278" elapsed="0.013117">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:44:41.633222" elapsed="0.025299">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t21" name="Add Tap Device Manually and Verify After Fail" 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-10T00:44:41.661562" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.661304" elapsed="0.000519"/>
</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-10T00:44:41.662796" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.662687" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.662669" elapsed="0.000252"/>
</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-10T00:44:41.667677" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.667568" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.667550" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.668759" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.668355" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.669267" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.668962" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.669339" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.669494" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.667985" 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-10T00:44:41.669877" 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-10T00:44:41.670122" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.669978" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.669961" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.669723" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.669572" 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-10T00:44:41.667205" elapsed="0.003095"/>
</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-10T00:44:41.662404" elapsed="0.007952"/>
</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-10T00:44:41.661988" elapsed="0.008412"/>
</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-10T00:44:41.659300" elapsed="0.011151"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.678559" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.674432" elapsed="0.004168">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.658713" elapsed="0.020022">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t22" name="Delete the Bridge Manually and Verify After Fail" 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-10T00:44:41.681802" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.681544" elapsed="0.000539"/>
</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-10T00:44:41.683062" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.682950" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.682932" 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-10T00:44:41.687802" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.687695" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.687676" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.688916" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.688520" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.689381" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.689098" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.689452" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.689604" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.688111" elapsed="0.001517"/>
</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-10T00:44:41.689978" 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-10T00:44:41.690286" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.690114" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.690096" elapsed="0.000268"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.689825" elapsed="0.000568"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.689679" 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-10T00:44:41.687338" elapsed="0.003141"/>
</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-10T00:44:41.682649" elapsed="0.007884"/>
</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-10T00:44:41.682235" elapsed="0.008344"/>
</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-10T00:44:41.679503" elapsed="0.011127"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.698665" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.694700" elapsed="0.004005">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.678944" elapsed="0.019910">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t23" name="Create Bridge In Owner and Verify After Fail" 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-10T00:44:41.701896" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.701620" elapsed="0.000543"/>
</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-10T00:44:41.703138" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.703028" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.703010" 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-10T00:44:41.708044" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.707937" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.707919" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.709187" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.708729" elapsed="0.000490"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.709705" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.709388" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.709780" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:41.709954" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.708331" elapsed="0.001649"/>
</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-10T00:44:41.710323" 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-10T00:44:41.710565" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.710422" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.710405" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.710184" elapsed="0.000480"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.710034" 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-10T00:44:41.707561" elapsed="0.003179"/>
</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-10T00:44:41.702727" elapsed="0.008070"/>
</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-10T00:44:41.702312" elapsed="0.008545"/>
</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-10T00:44:41.699580" elapsed="0.011335"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.722395" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.718721" elapsed="0.003712">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.699047" elapsed="0.023532">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t24" name="Create Port In Owner and Verify After Fail" line="123">
<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-10T00:44:41.725594" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.725338" elapsed="0.000532"/>
</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-10T00:44:41.726828" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.726719" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.726701" 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-10T00:44:41.731452" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.731343" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.731325" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.732532" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.732125" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.733018" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.732716" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.733090" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:44:41.733242" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.731737" 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-10T00:44:41.733603" 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-10T00:44:41.733840" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.733700" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.733683" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.733465" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.733318" elapsed="0.000660"/>
</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-10T00:44:41.730987" elapsed="0.003043"/>
</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-10T00:44:41.726439" elapsed="0.007645"/>
</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-10T00:44:41.726020" elapsed="0.008107"/>
</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-10T00:44:41.723307" elapsed="0.010869"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.745591" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.741903" elapsed="0.003744">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.722768" elapsed="0.023068">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t25" name="Modify the destination IP of Port In Owner After Fail" line="127">
<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-10T00:44:41.750326" elapsed="0.000294"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.749965" elapsed="0.000732"/>
</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-10T00:44:41.752063" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.751912" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.751886" elapsed="0.000280"/>
</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-10T00:44:41.758128" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.758023" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.758006" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.759366" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.758874" elapsed="0.000521"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.759857" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.759554" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.759931" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.760092" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.758447" elapsed="0.001680"/>
</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-10T00:44:41.760490" 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-10T00:44:41.760762" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.760588" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.760571" elapsed="0.000289"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.760329" elapsed="0.000556"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.760182" elapsed="0.000727"/>
</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-10T00:44:41.757655" elapsed="0.003307"/>
</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-10T00:44:41.751502" elapsed="0.009514"/>
</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-10T00:44:41.750920" elapsed="0.010138"/>
</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-10T00:44:41.746819" elapsed="0.014289"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.768827" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.765141" elapsed="0.003739">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.746128" elapsed="0.022889">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t26" name="Verify Port Is Modified After Fail" line="131">
<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-10T00:44:41.771977" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.771698" elapsed="0.000544"/>
</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-10T00:44:41.773288" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.773170" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.773150" 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-10T00:44:41.778172" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.778065" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.778046" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.779255" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.778874" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.779725" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.779440" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.779795" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:41.779965" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.778460" 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-10T00:44:41.780346" 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-10T00:44:41.780642" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.780453" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.780430" elapsed="0.000331"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.780190" elapsed="0.000598"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.780043" elapsed="0.000769"/>
</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-10T00:44:41.777682" elapsed="0.003199"/>
</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-10T00:44:41.772856" elapsed="0.008082"/>
</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-10T00:44:41.772408" 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-10T00:44:41.769661" elapsed="0.011371"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-04-10T00:44:41.788622" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.784865" elapsed="0.003795">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.769203" elapsed="0.019588">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s1-t27" name="Start Old Owner Instance" line="135">
<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-10T00:44:41.791671" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.791417" elapsed="0.000531"/>
</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-10T00:44:41.792928" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.792805" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.792786" 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-10T00:44:41.797489" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.797384" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.797366" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.798560" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.798178" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.799046" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.798743" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.799117" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.799267" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.797773" elapsed="0.001518"/>
</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-10T00:44:41.799634" 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-10T00:44:41.799883" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.799729" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.799712" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.799496" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.799349" elapsed="0.000657"/>
</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-10T00:44:41.797031" elapsed="0.003026"/>
</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-10T00:44:41.792523" elapsed="0.007587"/>
</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-10T00:44:41.792095" elapsed="0.008058"/>
</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-10T00:44:41.789447" elapsed="0.010755"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:44:41.804531" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.800450" elapsed="0.004120">Variable '${original_owner}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-04-10T00:44:41.788992" elapsed="0.015709">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t28" name="Check Shards Status After Recover" line="139">
<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-10T00:44:41.807692" elapsed="0.000231"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:44:41.807398" 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-10T00:44:41.809010" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.808885" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.808866" 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-10T00:44:41.814121" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:44:41.814008" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-10T00:44:41.813989" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.815198" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.814795" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.815674" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.815385" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.815747" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:41.815919" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.814422" elapsed="0.001523"/>
</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-10T00:44:41.816287" 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-10T00:44:41.816551" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.816405" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.816387" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.816147" elapsed="0.000504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.815998" 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-10T00:44:41.813623" elapsed="0.003104"/>
</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-10T00:44:41.808587" elapsed="0.008197"/>
</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-10T00:44:41.808143" elapsed="0.008685"/>
</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-10T00:44:41.805423" elapsed="0.011475"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:41.839201" elapsed="0.000227"/>
</kw>
<msg time="2026-04-10T00:44:41.839481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:41.838550" elapsed="0.000983"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:41.838075" elapsed="0.001533"/>
</kw>
<msg time="2026-04-10T00:44:41.839654" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:41.829914" elapsed="0.009790"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:41.829510" elapsed="0.010270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.840238" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:41.839971" 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-10T00:44:41.845281" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.844892" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.845811" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.845512" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:41.845901" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:41.846057" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:41.844505" 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-10T00:44:41.846233" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.846913" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:41.846557" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.847340" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.847097" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.847752" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:41.847513" 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-10T00:44:41.848423" 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-10T00:44:41.848685" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.848538" 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-10T00:44:41.848920" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.848764" 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-10T00:44:41.849137" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:41.848998" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:41.848519" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:41.848180" elapsed="0.001053"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.847826" elapsed="0.001431"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:41.849296" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:41.849503" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:41.849549" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:41.843734" elapsed="0.005837"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.850026" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:41.850102" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:41.849738" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:41.850752" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.850408" elapsed="0.000418">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:41.850194" elapsed="0.000713">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:41.850176" 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-10T00:44:41.851093" 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-10T00:44:41.851261" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:41.851326" 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-10T00:44:41.841277" elapsed="0.010155">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:41.841060" elapsed="0.010440">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:41.840931" elapsed="0.010623">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.840525" elapsed="0.011116">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:41.851924" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.821041" elapsed="0.031000">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:42.879570" elapsed="0.000287"/>
</kw>
<msg time="2026-04-10T00:44:42.879928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:42.878911" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:42.878438" elapsed="0.001646"/>
</kw>
<msg time="2026-04-10T00:44:42.880135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:42.870416" elapsed="0.009765"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:42.869996" elapsed="0.010261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.880706" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:42.880447" 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-10T00:44:42.885975" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:42.885569" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.886455" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:42.886163" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:42.886530" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:42.886688" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:42.885201" 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-10T00:44:42.886881" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.887539" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:42.887201" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.887996" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:42.887723" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.888410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:42.888169" 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-10T00:44:42.888825" 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-10T00:44:42.889094" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:42.888949" 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-10T00:44:42.889315" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:42.889174" 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-10T00:44:42.889533" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:42.889393" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:42.888929" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:42.888663" elapsed="0.000968"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:42.888484" elapsed="0.001172"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:42.889696" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:44:42.889945" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:42.889998" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:42.884471" elapsed="0.005626"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.890556" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:42.890634" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:42.890282" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:42.891255" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:42.890969" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:42.890727" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:42.890709" 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-10T00:44:42.891581" 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-10T00:44:42.891755" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:42.891870" 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-10T00:44:42.881766" elapsed="0.010220">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:42.881532" elapsed="0.010525">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:42.881391" elapsed="0.010722">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:42.880993" elapsed="0.011216">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:42.892438" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:42.852890" elapsed="0.039663">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:43.917724" elapsed="0.000272"/>
</kw>
<msg time="2026-04-10T00:44:43.918070" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:43.917071" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:43.916589" elapsed="0.001629"/>
</kw>
<msg time="2026-04-10T00:44:43.918266" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:43.908531" elapsed="0.009780"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:43.908077" elapsed="0.010308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.918840" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:43.918582" 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-10T00:44:43.924210" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:43.923795" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.924688" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:43.924397" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:43.924762" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:43.924938" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:43.923424" 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-10T00:44:43.925196" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.925874" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:43.925522" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.926298" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:43.926058" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.926706" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:43.926469" 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-10T00:44:43.927141" 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-10T00:44:43.927425" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:43.927251" 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-10T00:44:43.927647" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:43.927507" 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-10T00:44:43.927877" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:43.927725" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:43.927232" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:43.926976" elapsed="0.001002"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:43.926780" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:43.928044" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:43.928247" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:43.928294" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:43.922690" elapsed="0.005628"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.928757" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:43.928835" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:43.928486" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:43.929668" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:43.929174" elapsed="0.000570">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:43.928943" elapsed="0.000870">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:43.928925" 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-10T00:44:43.930022" 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-10T00:44:43.930194" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:43.930260" 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-10T00:44:43.920029" elapsed="0.010337">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:43.919775" elapsed="0.010660">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:43.919537" 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-10T00:44:43.919127" elapsed="0.011452">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:43.930806" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:43.893389" elapsed="0.037550">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:44.959571" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:44:44.959914" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:44.958755" elapsed="0.001226"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:44.958289" elapsed="0.001773"/>
</kw>
<msg time="2026-04-10T00:44:44.960108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:44.949099" elapsed="0.011053"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:44.948411" elapsed="0.011838"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.960838" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:44.960504" 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-10T00:44:44.967090" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:44.966565" elapsed="0.000561"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.967729" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:44.967335" elapsed="0.000431"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:44.967831" elapsed="0.000064"/>
</return>
<msg time="2026-04-10T00:44:44.968070" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:44.966159" 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-10T00:44:44.968281" elapsed="0.000211"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.969145" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:44.968700" elapsed="0.000478"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.969966" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:44.969385" elapsed="0.000615"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.970533" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:44.970203" elapsed="0.000366"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:44.971161" 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-10T00:44:44.971515" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:44.971309" elapsed="0.000282"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:44.971807" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:44.971624" 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-10T00:44:44.972114" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:44.971928" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:44.971281" elapsed="0.000931"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:44.970935" elapsed="0.001312"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:44.970637" elapsed="0.001644"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:44.972336" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:44:44.972612" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:44.972678" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:44.965297" elapsed="0.007414"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.973342" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:44.973445" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:44.972965" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:44.974349" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:44.973974" elapsed="0.000473">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:44.973644" elapsed="0.000892">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:44.973615" elapsed="0.000964">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:44.974777" 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-10T00:44:44.975062" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:44.975150" 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-10T00:44:44.962132" elapsed="0.013157">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:44.961837" elapsed="0.013545">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:44.961690" elapsed="0.013768">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:44.961213" elapsed="0.014373">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:44.975934" elapsed="0.000035"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:44.931781" elapsed="0.044308">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:46.005825" elapsed="0.000336"/>
</kw>
<msg time="2026-04-10T00:44:46.006250" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:46.004927" elapsed="0.001406"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:46.004199" elapsed="0.002279"/>
</kw>
<msg time="2026-04-10T00:44:46.006683" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:45.993444" elapsed="0.013373"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:45.992790" elapsed="0.014256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.008122" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:46.007495" elapsed="0.000726"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.019901" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:46.019393" elapsed="0.000543"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.020560" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:46.020259" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:46.020639" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:44:46.020834" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:46.018587" elapsed="0.002289"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:46.021035" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.021732" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:46.021376" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.022189" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:46.021945" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.022724" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:46.022479" 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-10T00:44:46.023204" 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-10T00:44:46.023467" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:46.023320" 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-10T00:44:46.023688" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:46.023550" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:46.023919" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:46.023764" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:46.023300" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:46.023030" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:46.022806" elapsed="0.001242"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:46.024091" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:46.024303" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:46.024349" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:46.016758" elapsed="0.007614"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.024825" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:46.024918" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:46.024541" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:46.025517" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:46.025228" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:46.025011" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:46.024993" 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-10T00:44:46.025864" 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-10T00:44:46.026173" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:46.026238" 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-10T00:44:46.010524" elapsed="0.015830">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:46.009970" elapsed="0.016468">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:46.009627" elapsed="0.016869">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:46.008726" elapsed="0.017862">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:46.026827" elapsed="0.000039"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:45.976742" elapsed="0.050220">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:47.052704" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:44:47.053037" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:47.052036" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:47.051509" elapsed="0.001675"/>
</kw>
<msg time="2026-04-10T00:44:47.053311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:47.043186" elapsed="0.010175"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:47.042696" elapsed="0.010756"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.053933" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:47.053651" elapsed="0.000346"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.059110" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:47.058690" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.059597" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:47.059300" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:47.059675" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:44:47.059868" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:47.058312" 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-10T00:44:47.060051" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.060729" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:47.060378" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.061218" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:47.060933" elapsed="0.000314"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.061648" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:47.061401" 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-10T00:44:47.062162" 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-10T00:44:47.062422" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:47.062275" 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-10T00:44:47.062645" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:47.062504" 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-10T00:44:47.062880" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:47.062724" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:47.062254" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:47.061985" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:47.061733" elapsed="0.001273"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:47.063045" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:47.063255" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:47.063301" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:47.057553" elapsed="0.005771"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.063785" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:47.063882" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:47.063494" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:47.064681" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:47.064209" elapsed="0.000548">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:47.063984" elapsed="0.000841">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:47.063959" 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-10T00:44:47.065045" 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-10T00:44:47.065273" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:47.065341" 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-10T00:44:47.055054" elapsed="0.010399">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:47.054788" elapsed="0.010734">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:47.054638" elapsed="0.010939">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:47.054231" elapsed="0.011435">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:47.065912" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:47.027799" elapsed="0.038249">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:48.091252" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:44:48.091580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:48.090513" elapsed="0.001136"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:48.089916" elapsed="0.001816"/>
</kw>
<msg time="2026-04-10T00:44:48.091779" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:48.081455" elapsed="0.010369"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:48.080769" elapsed="0.011150"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.092407" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:48.092141" 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-10T00:44:48.098004" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:48.097582" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.098548" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:48.098194" elapsed="0.000380"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:48.098624" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:48.098785" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:48.097158" elapsed="0.001652"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:48.098979" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.099647" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:48.099305" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.100143" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:48.099874" elapsed="0.000295"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.100556" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:48.100317" 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-10T00:44:48.101014" 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-10T00:44:48.101356" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:48.101128" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:48.101601" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:48.101442" 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-10T00:44:48.101820" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:48.101680" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:48.101106" elapsed="0.000805"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:48.100825" elapsed="0.001112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:48.100634" elapsed="0.001329"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:48.102005" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:48.102210" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:48.102263" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:48.096254" elapsed="0.006033"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.102742" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:48.102820" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:48.102458" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:48.103445" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:48.103151" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:48.102930" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:48.102911" 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-10T00:44:48.103779" 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-10T00:44:48.103969" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:48.104036" 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-10T00:44:48.093551" elapsed="0.010598">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:48.093280" elapsed="0.010938">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:48.093135" 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-10T00:44:48.092695" elapsed="0.011670">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:48.104598" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:48.066820" elapsed="0.037894">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:49.131816" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:44:49.132143" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:49.131168" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:49.130697" elapsed="0.001586"/>
</kw>
<msg time="2026-04-10T00:44:49.132329" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:49.121613" 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-10T00:44:49.121023" elapsed="0.011425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.132982" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:49.132633" 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-10T00:44:49.138132" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:49.137722" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.138605" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:49.138318" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:49.138679" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:44:49.138836" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:49.137347" 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-10T00:44:49.139036" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.139698" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:49.139352" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.140138" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:49.139897" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.140579" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:49.140310" 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-10T00:44:49.141049" 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-10T00:44:49.141310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:49.141160" 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-10T00:44:49.141526" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:49.141388" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:49.141744" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:49.141602" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:49.141140" elapsed="0.000677"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:49.140865" elapsed="0.000989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:49.140667" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:49.141920" elapsed="0.000041"/>
</return>
<msg time="2026-04-10T00:44:49.142158" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:49.142205" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:49.136581" elapsed="0.005647"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.142673" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:49.142749" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:49.142403" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:49.143530" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:49.143243" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:49.142856" elapsed="0.000814">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:49.142823" elapsed="0.000878">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:49.143867" 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-10T00:44:49.144038" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:49.144103" 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-10T00:44:49.134054" elapsed="0.010155">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:49.133809" elapsed="0.010508">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:49.133670" elapsed="0.010703">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:49.133268" 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-10T00:44:49.144691" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:49.105522" elapsed="0.039283">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:50.171362" elapsed="0.000338"/>
</kw>
<msg time="2026-04-10T00:44:50.171773" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:50.170398" elapsed="0.001459"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:50.169725" elapsed="0.002220"/>
</kw>
<msg time="2026-04-10T00:44:50.171994" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:50.159128" elapsed="0.012913"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:50.158511" elapsed="0.013606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.172634" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:50.172319" 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-10T00:44:50.179960" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:50.179505" elapsed="0.000486"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.180462" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:50.180158" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:50.180544" elapsed="0.000055"/>
</return>
<msg time="2026-04-10T00:44:50.180740" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:50.179101" 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-10T00:44:50.180945" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.181647" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:50.181293" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.182130" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:50.181871" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.182712" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:50.182365" elapsed="0.000384"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:50.183216" 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-10T00:44:50.183500" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:50.183330" 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-10T00:44:50.183727" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:50.183586" 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-10T00:44:50.183963" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:50.183805" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:50.183310" elapsed="0.000792"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:50.183030" elapsed="0.001096"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:50.182813" elapsed="0.001338"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:50.184191" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:50.184396" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:50.184444" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:50.178316" elapsed="0.006153"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.184961" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:50.185040" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:50.184661" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:50.185662" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:50.185375" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:50.185135" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:50.185117" 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-10T00:44:50.186012" 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-10T00:44:50.186186" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:50.186261" 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-10T00:44:50.173868" elapsed="0.012511">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:50.173595" elapsed="0.012878">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:50.173450" elapsed="0.013080">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:50.172986" elapsed="0.013635">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:50.186872" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:50.145563" elapsed="0.041431">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:51.245709" elapsed="0.000271"/>
</kw>
<msg time="2026-04-10T00:44:51.246053" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:51.244857" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:51.244241" elapsed="0.001967"/>
</kw>
<msg time="2026-04-10T00:44:51.246257" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:51.235558" elapsed="0.010757"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:51.234937" elapsed="0.011493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.247004" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:51.246659" 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-10T00:44:51.253266" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:51.252766" elapsed="0.000534"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.253897" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:51.253563" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:51.253977" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:44:51.254154" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:51.252319" elapsed="0.001862"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:51.254336" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.255059" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:51.254676" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.255504" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:51.255250" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.255953" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:51.255682" 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-10T00:44:51.256716" 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-10T00:44:51.257011" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:51.256835" 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-10T00:44:51.257244" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:51.257097" 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-10T00:44:51.257469" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:51.257324" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:51.256813" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:51.256514" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:51.256037" elapsed="0.001562"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:51.257642" elapsed="0.000037"/>
</return>
<msg time="2026-04-10T00:44:51.257875" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:51.257924" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:51.251507" elapsed="0.006441"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.258484" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:51.258563" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:51.258167" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:51.259297" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:51.258935" elapsed="0.000451">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:51.258659" elapsed="0.000795">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:51.258640" elapsed="0.000847">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:51.259660" 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-10T00:44:51.259878" elapsed="0.000031"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:51.259983" 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-10T00:44:51.248375" elapsed="0.011767">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:51.248011" elapsed="0.012209">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:51.247801" elapsed="0.012479">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:51.247305" elapsed="0.013071">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:51.260635" elapsed="0.000097"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:51.187772" elapsed="0.073059">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:52.293122" elapsed="0.000337"/>
</kw>
<msg time="2026-04-10T00:44:52.293550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:52.292136" elapsed="0.001507"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:52.291296" elapsed="0.002470"/>
</kw>
<msg time="2026-04-10T00:44:52.293839" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:52.279011" elapsed="0.014920"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:52.277972" elapsed="0.016071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.294601" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:52.294319" 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-10T00:44:52.301610" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:52.301008" elapsed="0.000643"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.302324" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:52.301900" elapsed="0.000462"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:52.302424" elapsed="0.000046"/>
</return>
<msg time="2026-04-10T00:44:52.302645" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:52.300481" elapsed="0.002202"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:52.302908" elapsed="0.000239"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.303890" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:52.303366" elapsed="0.000559"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.304456" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:52.304127" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.305076" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:52.304707" 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-10T00:44:52.305706" 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-10T00:44:52.306082" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:52.305874" 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-10T00:44:52.306398" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:52.306200" 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-10T00:44:52.306714" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:52.306511" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:52.305827" elapsed="0.000998"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:52.305468" elapsed="0.001405"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:52.305189" elapsed="0.001724"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:52.306974" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:44:52.307253" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:52.307321" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:52.299436" elapsed="0.007921"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.308138" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:52.308247" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:52.307715" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:52.308968" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:52.308592" elapsed="0.000458">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:52.308350" elapsed="0.000783">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:52.308329" elapsed="0.000853">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:52.309371" 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-10T00:44:52.309551" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:52.309617" 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-10T00:44:52.296066" elapsed="0.013665">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:52.295786" elapsed="0.014018">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:52.295599" elapsed="0.014279">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:52.294918" elapsed="0.015056">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:52.310216" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:52.261618" elapsed="0.048715">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:53.334730" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:44:53.335068" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:53.334078" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:53.333592" elapsed="0.001621"/>
</kw>
<msg time="2026-04-10T00:44:53.335283" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:53.325369" elapsed="0.009963"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:53.324878" elapsed="0.010530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.335877" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:53.335602" 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-10T00:44:53.340986" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:53.340567" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.341470" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:53.341177" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:53.341547" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:44:53.341709" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:53.340195" 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-10T00:44:53.341981" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.342647" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:53.342302" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.343091" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:53.342832" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.343571" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:53.343295" 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-10T00:44:53.344023" 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-10T00:44:53.344280" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:53.344134" 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-10T00:44:53.344511" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:53.344361" 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-10T00:44:53.344733" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:53.344592" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:53.344114" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:53.343836" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:53.343650" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:53.344937" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:44:53.345151" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:53.345198" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:53.339463" elapsed="0.005759"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.345907" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:53.345988" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:53.345393" elapsed="0.000621"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:53.346605" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:53.346307" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:53.346086" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:53.346067" 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-10T00:44:53.346951" 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-10T00:44:53.347124" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:53.347190" 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-10T00:44:53.336961" elapsed="0.010371">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:53.336697" elapsed="0.010723">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:53.336550" elapsed="0.010928">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:53.336154" elapsed="0.011444">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:53.347857" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:53.311203" elapsed="0.036776">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:54.373884" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:44:54.374213" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:54.373104" elapsed="0.001176"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:54.372623" elapsed="0.001737"/>
</kw>
<msg time="2026-04-10T00:44:54.374411" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:54.364422" elapsed="0.010034"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:54.363905" elapsed="0.010624"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.375027" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:54.374721" elapsed="0.000356"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.380391" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:54.380001" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.380877" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:54.380575" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:54.380954" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:54.381116" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:54.379621" elapsed="0.001519"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:54.381292" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.381955" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:54.381603" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.382374" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:54.382135" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.382779" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:54.382543" 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-10T00:44:54.383233" 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-10T00:44:54.383488" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:54.383341" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:54.383703" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:54.383565" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:54.383931" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:54.383778" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:54.383321" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:54.383068" elapsed="0.000963"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:54.382881" elapsed="0.001177"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:54.384098" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:54.384298" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:54.384344" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:54.378903" elapsed="0.005464"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.384809" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:54.384902" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:54.384537" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:54.385549" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:54.385263" elapsed="0.000403">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:54.385048" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:54.385029" 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-10T00:44:54.385964" 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-10T00:44:54.386135" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:54.386200" 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-10T00:44:54.376109" elapsed="0.010200">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:54.375870" elapsed="0.010507">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:54.375711" elapsed="0.010721">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:54.375307" elapsed="0.011216">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:54.386751" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:54.348782" elapsed="0.038148">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:55.414936" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:44:55.415273" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:55.414186" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:55.413701" elapsed="0.001724"/>
</kw>
<msg time="2026-04-10T00:44:55.415471" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:55.405468" elapsed="0.010048"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:55.404940" elapsed="0.010661"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.416130" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:55.415820" elapsed="0.000355"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.421285" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:55.420889" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.421768" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:55.421475" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:55.421860" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:44:55.422028" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:55.420502" 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-10T00:44:55.422208" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.422908" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:55.422546" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.423335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:55.423093" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.423826" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:55.423584" 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-10T00:44:55.424272" 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-10T00:44:55.424534" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:55.424385" 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-10T00:44:55.424756" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:55.424617" 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-10T00:44:55.424998" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:55.424834" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:55.424364" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:55.424104" elapsed="0.000995"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:55.423918" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:55.425168" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:55.425372" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:55.425418" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:55.419769" elapsed="0.005672"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.426084" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:55.426164" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:55.425611" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:55.426805" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:55.426518" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:55.426261" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:55.426241" 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-10T00:44:55.427162" 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-10T00:44:55.427332" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:55.427399" 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-10T00:44:55.417229" elapsed="0.010277">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:55.416986" elapsed="0.010589">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:55.416816" elapsed="0.010813">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:55.416412" elapsed="0.011305">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:55.427966" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:55.387734" elapsed="0.040348">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:56.457536" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:44:56.457897" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:56.456829" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:56.456353" elapsed="0.001728"/>
</kw>
<msg time="2026-04-10T00:44:56.458214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:56.446637" elapsed="0.011627"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:56.446012" elapsed="0.012332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.458824" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:56.458533" elapsed="0.000382"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.464328" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:56.463908" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.464824" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:56.464521" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:56.464921" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:56.465097" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:56.463506" elapsed="0.001618"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:56.465282" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.465996" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:56.465610" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.466446" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:56.466194" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.466897" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:56.466627" 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-10T00:44:56.467349" 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-10T00:44:56.467609" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:56.467461" 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-10T00:44:56.467835" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:56.467692" 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-10T00:44:56.468087" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:56.467931" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:56.467441" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:56.467176" elapsed="0.001016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:56.466975" elapsed="0.001242"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:56.468257" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:56.468460" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:56.468506" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:56.462757" elapsed="0.005773"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.468995" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:56.469079" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:56.468701" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:56.469686" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:56.469403" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:56.469183" elapsed="0.000642">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:56.469164" 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-10T00:44:56.470045" 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-10T00:44:56.470268" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:56.470338" 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-10T00:44:56.460026" elapsed="0.010423">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:56.459717" elapsed="0.010803">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:56.459572" 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-10T00:44:56.459166" elapsed="0.011503">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:56.470924" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:56.428991" elapsed="0.042053">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:57.498673" elapsed="0.000262"/>
</kw>
<msg time="2026-04-10T00:44:57.499004" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:57.498023" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:57.497549" elapsed="0.001597"/>
</kw>
<msg time="2026-04-10T00:44:57.499193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:57.489561" elapsed="0.009677"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:57.489131" elapsed="0.010181"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.499775" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:57.499513" 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-10T00:44:57.504832" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:57.504444" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.505324" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:57.505033" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:57.505398" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:44:57.505744" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:57.504071" elapsed="0.001698"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:44:57.505932" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.506583" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:57.506246" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.507019" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:57.506762" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.507432" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:57.507189" 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-10T00:44:57.507865" 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-10T00:44:57.508190" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:57.507973" 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-10T00:44:57.508413" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:57.508273" 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-10T00:44:57.508631" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:57.508491" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:57.507954" elapsed="0.000751"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:57.507682" elapsed="0.001047"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:57.507503" elapsed="0.001252"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:57.508794" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:57.509010" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:57.509056" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:57.503336" elapsed="0.005743"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.509709" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:57.509788" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:57.509254" elapsed="0.000558"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:57.510395" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:57.510116" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:57.509898" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:57.509878" 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-10T00:44:57.510716" 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-10T00:44:57.510901" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:57.510967" 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-10T00:44:57.500821" elapsed="0.010254">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:57.500592" elapsed="0.010553">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:57.500453" elapsed="0.010747">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:57.500061" elapsed="0.011227">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:57.511514" elapsed="0.000023"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:57.471827" elapsed="0.039800">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:58.538956" elapsed="0.000261"/>
</kw>
<msg time="2026-04-10T00:44:58.539290" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:58.538137" elapsed="0.001221"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:58.537652" elapsed="0.001788"/>
</kw>
<msg time="2026-04-10T00:44:58.539487" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:58.529583" elapsed="0.009948"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:58.528961" elapsed="0.010642"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.540170" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:58.539803" elapsed="0.000414"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.545525" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:58.545128" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.546029" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:58.545717" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:58.546105" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:44:58.546267" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:58.544711" 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-10T00:44:58.546443" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.547119" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:58.546760" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.547545" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:58.547301" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.547976" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:58.547717" 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-10T00:44:58.548399" 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-10T00:44:58.548656" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:58.548507" 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-10T00:44:58.548902" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:58.548742" 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-10T00:44:58.549136" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:58.548983" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:58.548487" elapsed="0.000724"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:58.548232" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:58.548049" elapsed="0.001213"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:58.549303" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:44:58.549504" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:58.549550" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:58.543989" elapsed="0.005584"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.550037" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:58.550114" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:58.549742" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:58.550709" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:58.550424" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:58.550208" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:58.550190" 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-10T00:44:58.551057" 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-10T00:44:58.551228" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:58.551293" 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-10T00:44:58.541283" elapsed="0.010117">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:58.541022" elapsed="0.010493">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:58.540872" elapsed="0.010699">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:44:58.540449" elapsed="0.011211">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:58.551909" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:58.512444" elapsed="0.039581">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:44:59.577668" elapsed="0.000276"/>
</kw>
<msg time="2026-04-10T00:44:59.578016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:59.576997" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:59.576490" elapsed="0.001675"/>
</kw>
<msg time="2026-04-10T00:44:59.578212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:44:59.568324" elapsed="0.009934"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:44:59.567889" elapsed="0.010444"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.578794" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:44:59.578524" 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-10T00:44:59.583992" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:59.583562" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.584471" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:59.584179" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:44:59.584547" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:44:59.584752" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:44:59.583191" 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-10T00:44:59.584947" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.585608" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:44:59.585267" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.586073" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:59.585809" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.586489" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:44:59.586248" 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-10T00:44:59.586950" 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-10T00:44:59.587208" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:59.587060" 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-10T00:44:59.587427" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:59.587289" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:59.587641" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:44:59.587502" elapsed="0.000270"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:44:59.587041" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:44:59.586762" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:59.586563" elapsed="0.001306"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:44:59.587913" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:44:59.588120" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:44:59.588167" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:44:59.582439" elapsed="0.005751"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.588669" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:44:59.588756" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:44:59.588363" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:44:59.589579" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:44:59.589097" elapsed="0.000563">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:44:59.588873" elapsed="0.000858">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:44:59.588838" 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-10T00:44:59.589948" 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-10T00:44:59.590123" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:44:59.590189" 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-10T00:44:59.579905" elapsed="0.010395">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:44:59.579648" elapsed="0.010722">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:44:59.579489" 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-10T00:44:59.579090" elapsed="0.011426">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:44:59.590749" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:59.552810" elapsed="0.038106">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:00.614975" elapsed="0.000261"/>
</kw>
<msg time="2026-04-10T00:45:00.615306" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:00.614292" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:00.613812" elapsed="0.001646"/>
</kw>
<msg time="2026-04-10T00:45:00.615505" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:00.605783" elapsed="0.009768"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:00.605361" elapsed="0.010264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.616105" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:00.615825" 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-10T00:45:00.621287" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:00.620889" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.621877" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:00.621564" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:00.621959" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:45:00.622122" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:00.620479" 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-10T00:45:00.622300" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.622982" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:00.622618" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.623624" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:00.623167" elapsed="0.000485"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.624072" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:00.623803" 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-10T00:45:00.624532" 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-10T00:45:00.624794" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:00.624646" 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-10T00:45:00.625032" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:00.624891" 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-10T00:45:00.625248" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:00.625108" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:00.624626" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:00.624363" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:00.624148" elapsed="0.001226"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:00.625415" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:00.625619" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:00.625665" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:00.619716" elapsed="0.005971"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.626150" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:00.626227" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:00.625872" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:00.626824" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:00.626538" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:00.626320" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:00.626302" 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-10T00:45:00.627174" 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-10T00:45:00.627345" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:00.627410" 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-10T00:45:00.617217" elapsed="0.010301">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:00.616973" elapsed="0.010614">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:00.616806" elapsed="0.010836">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:00.616399" 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-10T00:45:00.627978" elapsed="0.000062"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:00.591731" elapsed="0.036407">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:01.653064" elapsed="0.000279"/>
</kw>
<msg time="2026-04-10T00:45:01.653416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:01.652327" elapsed="0.001163"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:01.651781" elapsed="0.001795"/>
</kw>
<msg time="2026-04-10T00:45:01.653624" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:01.643457" elapsed="0.010213"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:01.642911" elapsed="0.010842"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.654261" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:01.653983" 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-10T00:45:01.659890" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:01.659431" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.660379" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:01.660084" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:01.660457" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:45:01.660624" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:01.659050" elapsed="0.001599"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:01.660803" elapsed="0.000184"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.661492" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:01.661150" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.661949" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:01.661676" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.662367" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:01.662124" 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-10T00:45:01.662807" 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-10T00:45:01.663092" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:01.662942" 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-10T00:45:01.663314" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:01.663173" 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-10T00:45:01.663533" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:01.663392" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:01.662920" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:01.662637" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:01.662441" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:01.663701" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:01.663973" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:01.664021" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:01.658293" elapsed="0.005751"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.664575" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:01.664652" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:01.664291" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:01.665275" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:01.664984" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:01.664747" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:01.664728" 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-10T00:45:01.665609" 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-10T00:45:01.665800" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:01.665888" 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-10T00:45:01.655387" elapsed="0.010616">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:01.655141" elapsed="0.010933">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:01.654990" 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-10T00:45:01.654552" elapsed="0.011667">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:01.666454" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:01.629121" elapsed="0.037452">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:02.690755" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:45:02.691080" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:02.690110" elapsed="0.001033"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:02.689634" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:45:02.691270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:02.681604" elapsed="0.009711"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:02.681141" elapsed="0.010260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.691870" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:02.691596" 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-10T00:45:02.696949" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:02.696545" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.697422" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:02.697132" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:02.697496" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:02.697653" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:02.696181" elapsed="0.001496"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:02.697918" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.698629" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:02.698250" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.699071" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:02.698814" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.699511" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:02.699242" 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-10T00:45:02.699961" 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-10T00:45:02.700214" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:02.700071" 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-10T00:45:02.700429" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:02.700294" elapsed="0.000188"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:02.700650" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:02.700506" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:02.700052" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:02.699769" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:02.699586" elapsed="0.001187"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:02.700812" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:02.701028" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:02.701075" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:02.695449" elapsed="0.005649"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.701543" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:02.701621" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:02.701271" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:02.702403" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:02.701940" elapsed="0.000536">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:02.701713" elapsed="0.000828">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:02.701695" elapsed="0.000877">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:02.702724" 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-10T00:45:02.702910" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:02.702978" 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-10T00:45:02.692931" elapsed="0.010154">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:02.692675" elapsed="0.010478">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:02.692536" elapsed="0.010670">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:02.692144" elapsed="0.011149">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:02.703557" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:02.667474" elapsed="0.036199">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:03.729716" elapsed="0.000278"/>
</kw>
<msg time="2026-04-10T00:45:03.730067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:03.728899" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:03.728422" elapsed="0.001794"/>
</kw>
<msg time="2026-04-10T00:45:03.730262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:03.720270" elapsed="0.010045"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:03.719754" elapsed="0.010647"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.730878" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:03.730604" 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-10T00:45:03.736262" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:03.735867" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.736735" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:03.736447" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:03.736810" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:45:03.736988" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:03.735484" 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-10T00:45:03.737169" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.738047" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:03.737482" elapsed="0.000592"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.738473" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:03.738231" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.738902" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:03.738644" 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-10T00:45:03.739432" 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-10T00:45:03.739691" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:03.739543" 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-10T00:45:03.739926" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:03.739770" 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-10T00:45:03.740154" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:03.740009" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:03.739523" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:03.739263" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:03.739064" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:03.740321" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:03.740522" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:03.740568" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:03.734728" elapsed="0.005863"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.741052" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:03.741128" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:03.740758" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:03.741776" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:03.741483" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:03.741266" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:03.741247" 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-10T00:45:03.742122" 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-10T00:45:03.742292" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:03.742357" 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-10T00:45:03.732143" elapsed="0.010323">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:03.731900" elapsed="0.010634">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:03.731584" elapsed="0.011006">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:03.731181" elapsed="0.011497">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:03.742923" elapsed="0.000040"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:03.704455" elapsed="0.038601">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:04.768564" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:45:04.768891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:04.767910" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:04.767436" elapsed="0.001600"/>
</kw>
<msg time="2026-04-10T00:45:04.769081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:04.759270" elapsed="0.009855"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:04.758854" elapsed="0.010345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.769653" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:04.769387" 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-10T00:45:04.775011" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:04.774590" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.775493" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:04.775202" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:04.775567" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:04.775727" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:04.774195" 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-10T00:45:04.775928" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.776584" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:04.776245" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.777041" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:04.776767" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.777526" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:04.777282" 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-10T00:45:04.777996" 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-10T00:45:04.778251" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:04.778106" 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-10T00:45:04.778479" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:04.778337" 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-10T00:45:04.778734" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:04.778587" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:04.778086" elapsed="0.000723"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:04.777809" elapsed="0.001024"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:04.777613" elapsed="0.001260"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:04.778915" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:04.779119" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:04.779165" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:04.773458" elapsed="0.005731"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.779647" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:04.779736" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:04.779359" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:04.780344" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:04.780064" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:04.779832" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:04.779814" 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-10T00:45:04.780664" 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-10T00:45:04.780840" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:04.780921" 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-10T00:45:04.770721" elapsed="0.010307">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:04.770473" elapsed="0.010625">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:04.770335" elapsed="0.010816">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:04.769940" 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-10T00:45:04.781473" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:04.743884" elapsed="0.037702">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:05.811191" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:45:05.811519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:05.810517" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:05.810035" elapsed="0.001631"/>
</kw>
<msg time="2026-04-10T00:45:05.811820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:05.801679" elapsed="0.010247"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:05.801081" elapsed="0.010926"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.812456" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:05.812198" 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-10T00:45:05.817558" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:05.817139" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.818059" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:05.817745" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:05.818146" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:05.818313" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:05.816754" 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-10T00:45:05.818489" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.819161" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:05.818802" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.819578" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:05.819342" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.820062" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:05.819747" elapsed="0.000342"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:05.820477" 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-10T00:45:05.820729" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:05.820585" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:05.820962" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:05.820808" 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-10T00:45:05.821187" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:05.821040" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:05.820565" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:05.820315" elapsed="0.000971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:05.820135" elapsed="0.001176"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:05.821350" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:05.821548" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:05.821594" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:05.816049" elapsed="0.005569"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.822273" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:05.822351" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:05.821787" elapsed="0.000588"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:05.822957" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:05.822659" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:05.822444" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:05.822426" 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-10T00:45:05.823277" 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-10T00:45:05.823488" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:05.823555" 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-10T00:45:05.813537" elapsed="0.010124">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:05.813293" elapsed="0.010436">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:05.813148" elapsed="0.010635">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:05.812727" elapsed="0.011160">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:05.824115" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:05.782579" elapsed="0.041650">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:06.849518" elapsed="0.000307"/>
</kw>
<msg time="2026-04-10T00:45:06.849912" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:06.848871" elapsed="0.001107"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:06.848392" elapsed="0.001667"/>
</kw>
<msg time="2026-04-10T00:45:06.850106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:06.839485" elapsed="0.010665"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:06.838922" elapsed="0.011301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.850679" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:06.850420" 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-10T00:45:06.857190" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:06.856596" elapsed="0.000634"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.857921" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:06.857452" elapsed="0.000514"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:06.858051" elapsed="0.000054"/>
</return>
<msg time="2026-04-10T00:45:06.858385" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:06.856055" elapsed="0.002371"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:06.858640" elapsed="0.000261"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.859619" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:06.859141" elapsed="0.000516"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.860240" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:06.859893" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.860890" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:06.860504" 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-10T00:45:06.861610" 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-10T00:45:06.862117" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:06.861804" 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-10T00:45:06.862353" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:06.862207" 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-10T00:45:06.862576" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:06.862431" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:06.861775" elapsed="0.000880"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:06.861326" elapsed="0.001358"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:06.861005" elapsed="0.001711"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:06.862760" elapsed="0.000051"/>
</return>
<msg time="2026-04-10T00:45:06.863025" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:06.863071" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:06.855025" elapsed="0.008070"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.863560" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:06.863638" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:06.863279" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:06.864271" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:06.863973" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:06.863731" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:06.863712" 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-10T00:45:06.864616" 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-10T00:45:06.864788" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:06.864869" 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-10T00:45:06.851746" elapsed="0.013234">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:06.851510" elapsed="0.013541">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:06.851361" elapsed="0.013747">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:06.850966" elapsed="0.014232">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:06.865430" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:06.825031" elapsed="0.040515">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:07.887969" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:45:07.888295" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:07.887304" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:07.886830" elapsed="0.001610"/>
</kw>
<msg time="2026-04-10T00:45:07.888486" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:07.878768" elapsed="0.009775"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:07.878353" elapsed="0.010268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.889158" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:07.888816" 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-10T00:45:07.894253" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:07.893857" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.894728" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:07.894440" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:07.894803" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:07.894980" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:07.893470" 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-10T00:45:07.895155" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.895805" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:07.895470" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.896243" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:07.896004" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.896645" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:07.896412" 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-10T00:45:07.897081" 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-10T00:45:07.897352" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:07.897189" 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-10T00:45:07.897577" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:07.897438" 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-10T00:45:07.897791" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:07.897653" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:07.897169" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:07.896915" elapsed="0.000989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:07.896716" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:07.897972" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:07.898172" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:07.898217" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:07.892734" elapsed="0.005506"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.900320" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:07.900403" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:07.898408" elapsed="0.002020"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:07.901026" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:07.900722" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:07.900500" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:07.900481" 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-10T00:45:07.901376" 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-10T00:45:07.901550" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:07.901616" 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-10T00:45:07.890253" elapsed="0.011470">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:07.890014" elapsed="0.011818">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:07.889865" elapsed="0.012040">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:07.889456" elapsed="0.012539">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:07.902231" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:07.866196" elapsed="0.036150">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:08.928322" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:45:08.928634" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:08.927627" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:08.927113" elapsed="0.001666"/>
</kw>
<msg time="2026-04-10T00:45:08.928827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:08.918229" elapsed="0.010670"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:08.917628" elapsed="0.011348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.929449" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:08.929176" 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-10T00:45:08.934769" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:08.934377" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.935265" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:08.934972" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:08.935338" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:08.935499" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:08.934006" 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-10T00:45:08.935674" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.936350" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:08.936013" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.936770" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:08.936531" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.937206" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:08.936968" 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-10T00:45:08.937632" 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-10T00:45:08.937898" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:08.937739" 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-10T00:45:08.938118" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:08.937979" 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-10T00:45:08.938338" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:08.938196" elapsed="0.000278"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:08.937719" elapsed="0.000779"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:08.937464" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:08.937280" elapsed="0.001269"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:08.938589" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:08.938792" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:08.938837" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:08.933270" elapsed="0.005605"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.939320" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:08.939396" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:08.939047" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:08.940015" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:08.939701" elapsed="0.000400">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:08.939487" elapsed="0.000691">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:08.939469" elapsed="0.000750">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:08.940401" 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-10T00:45:08.940578" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:08.940644" 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-10T00:45:08.930528" elapsed="0.010227">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:08.930290" elapsed="0.010536">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:08.930143" elapsed="0.010770">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:08.929728" elapsed="0.011280">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:08.941250" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:08.903193" elapsed="0.038173">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:09.967126" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:45:09.967440" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:09.966463" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:09.965999" elapsed="0.001583"/>
</kw>
<msg time="2026-04-10T00:45:09.967627" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:09.957657" elapsed="0.010015"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:09.957248" elapsed="0.010497"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.968209" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:09.967950" 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-10T00:45:09.973299" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:09.972910" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.973857" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:09.973550" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:09.973935" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:09.974095" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:09.972515" 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-10T00:45:09.974272" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.974939" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:09.974587" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.975365" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:09.975123" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.975776" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:09.975539" 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-10T00:45:09.976210" 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-10T00:45:09.976461" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:09.976317" 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-10T00:45:09.976699" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:09.976558" 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-10T00:45:09.976932" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:09.976777" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:09.976298" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:09.976046" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:09.975862" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:09.977098" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:09.977306" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:09.977354" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:09.971763" elapsed="0.005615"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.977815" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:09.977908" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:09.977547" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:09.978722" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:09.978231" elapsed="0.000563">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:09.978003" elapsed="0.000874">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:09.977984" elapsed="0.000929">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:09.979085" 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-10T00:45:09.979272" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:09.979338" 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-10T00:45:09.969289" elapsed="0.010158">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:09.969058" elapsed="0.010459">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:09.968918" elapsed="0.010653">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:09.968505" elapsed="0.011157">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:09.979932" elapsed="0.000062"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:09.942222" elapsed="0.037871">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:11.005697" elapsed="0.000279"/>
</kw>
<msg time="2026-04-10T00:45:11.006056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:11.004929" elapsed="0.001203"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:11.004425" elapsed="0.001792"/>
</kw>
<msg time="2026-04-10T00:45:11.006264" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:10.995398" elapsed="0.010911"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:10.994799" elapsed="0.011583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.007126" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:11.006609" elapsed="0.000570"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.012867" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:11.012451" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.013428" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:11.013074" elapsed="0.000383"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:11.013508" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:11.013670" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:11.012025" elapsed="0.001670"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:11.013865" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.014564" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:11.014188" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.015242" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:11.014750" elapsed="0.000519"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.015663" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:11.015420" 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-10T00:45:11.016156" 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-10T00:45:11.016422" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:11.016272" 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-10T00:45:11.016646" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:11.016503" 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-10T00:45:11.016906" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:11.016736" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:11.016252" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:11.015944" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:11.015739" elapsed="0.001295"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:11.017075" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:11.017281" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:11.017327" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:11.011240" elapsed="0.006112"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.017907" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:11.018018" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:11.017606" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:11.018696" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:11.018407" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:11.018135" elapsed="0.000703">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:11.018111" 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-10T00:45:11.019041" 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-10T00:45:11.019218" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:11.019287" 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-10T00:45:11.008582" elapsed="0.010814">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:11.008284" elapsed="0.011185">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:11.007900" 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-10T00:45:11.007441" elapsed="0.012181">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:11.019874" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:10.980944" elapsed="0.039050">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:12.047468" elapsed="0.000278"/>
</kw>
<msg time="2026-04-10T00:45:12.047820" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:12.046800" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:12.046336" elapsed="0.001653"/>
</kw>
<msg time="2026-04-10T00:45:12.048035" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:12.036837" elapsed="0.011242"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:12.036226" elapsed="0.011927"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.048621" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:12.048359" 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-10T00:45:12.053989" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:12.053585" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.054465" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:12.054173" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:12.054539" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:12.054699" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:12.053214" elapsed="0.001510"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:12.054968" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.055631" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:12.055292" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.056119" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:12.055856" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.056545" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:12.056297" 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-10T00:45:12.056996" 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-10T00:45:12.057265" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:12.057109" 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-10T00:45:12.057496" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:12.057352" 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-10T00:45:12.057726" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:12.057575" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:12.057089" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:12.056807" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:12.056622" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:12.057912" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:12.058120" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:12.058168" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:12.052489" elapsed="0.005704"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.058645" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:12.058723" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:12.058367" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:12.059329" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:12.059048" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:12.058815" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:12.058797" 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-10T00:45:12.059656" elapsed="0.000062"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:12.059897" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:12.059970" 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-10T00:45:12.049703" elapsed="0.010384">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:12.049467" elapsed="0.010690">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:12.049321" elapsed="0.010890">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:12.048915" 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-10T00:45:12.060536" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:12.020797" elapsed="0.039855">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:13.086521" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:45:13.086829" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:13.085790" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:13.085330" elapsed="0.001667"/>
</kw>
<msg time="2026-04-10T00:45:13.087043" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:13.077214" elapsed="0.009875"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:13.076729" elapsed="0.010436"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.087644" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:13.087384" 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-10T00:45:13.092736" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:13.092350" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.093225" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:13.092937" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:13.093306" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:45:13.093544" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:13.091968" 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-10T00:45:13.093794" elapsed="0.000252"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.094731" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:13.094265" elapsed="0.000503"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.095360" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:13.095005" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.095947" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:13.095596" elapsed="0.000388"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:13.096537" 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-10T00:45:13.096926" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:13.096694" 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-10T00:45:13.097236" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:13.097041" 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-10T00:45:13.097545" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:13.097345" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:13.096667" elapsed="0.000984"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:13.096301" elapsed="0.001383"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:13.096049" elapsed="0.001669"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:13.097773" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:45:13.098073" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:13.098139" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:13.091219" elapsed="0.006953"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.098788" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:13.098919" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:13.098415" elapsed="0.000589"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:13.100164" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:13.099700" elapsed="0.000573">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:13.099105" elapsed="0.001264">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:13.099078" elapsed="0.001329">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:13.100572" 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-10T00:45:13.100788" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:13.100885" 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-10T00:45:13.088719" elapsed="0.012301">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:13.088484" elapsed="0.012621">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:13.088344" elapsed="0.012825">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:13.087945" elapsed="0.013329">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:13.101540" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:13.061543" elapsed="0.040116">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:14.129549" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:45:14.129903" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:14.128894" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:14.128366" elapsed="0.001687"/>
</kw>
<msg time="2026-04-10T00:45:14.130100" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:14.118672" elapsed="0.011472"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:14.118003" elapsed="0.012215"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.130684" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:14.130415" 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-10T00:45:14.136094" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:14.135675" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.136621" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:14.136283" elapsed="0.000366"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:14.136703" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:45:14.136910" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:14.135299" 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-10T00:45:14.137091" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.137766" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:14.137414" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.138208" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:14.137966" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.138698" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:14.138455" 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-10T00:45:14.139168" 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-10T00:45:14.139424" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:14.139279" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:14.139644" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:14.139505" 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-10T00:45:14.139883" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:14.139721" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:14.139259" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:14.138998" elapsed="0.001015"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:14.138774" elapsed="0.001265"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:14.140082" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:14.140433" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:14.140481" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:14.134533" elapsed="0.005971"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.140995" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:14.141074" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:14.140673" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:14.141663" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:14.141384" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:14.141169" elapsed="0.000633">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:14.141149" 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-10T00:45:14.142015" 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-10T00:45:14.142194" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:14.142266" 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-10T00:45:14.131790" elapsed="0.010585">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:14.131540" elapsed="0.010906">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:14.131395" elapsed="0.011106">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:14.130992" elapsed="0.011598">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:14.142820" elapsed="0.000060"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:14.102523" elapsed="0.040463">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:15.167870" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:45:15.168181" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:15.167183" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:15.166703" elapsed="0.001619"/>
</kw>
<msg time="2026-04-10T00:45:15.168442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:15.158340" elapsed="0.010149"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:15.157749" elapsed="0.010822"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.169040" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:15.168759" 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-10T00:45:15.174205" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:15.173787" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.174703" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:15.174393" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:15.174778" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:15.174952" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:15.173399" 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-10T00:45:15.175132" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.175793" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:15.175453" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.176235" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:15.175993" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.176647" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:15.176408" 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-10T00:45:15.177084" 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-10T00:45:15.177338" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:15.177193" 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-10T00:45:15.177562" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:15.177418" 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-10T00:45:15.177778" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:15.177640" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:15.177173" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:15.176917" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:15.176720" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:15.177954" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:15.178155" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:15.178202" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:15.172654" elapsed="0.005572"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.178862" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:15.178944" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:15.178394" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:15.179572" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:15.179270" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:15.179039" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:15.179021" 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-10T00:45:15.179911" 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-10T00:45:15.180118" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:15.180185" 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-10T00:45:15.170100" elapsed="0.010192">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:15.169865" elapsed="0.010495">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:15.169710" elapsed="0.010704">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:15.169315" elapsed="0.011187">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:15.180730" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:15.143988" elapsed="0.036871">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:16.207338" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:45:16.207662" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:16.206572" elapsed="0.001155"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:16.206087" elapsed="0.001721"/>
</kw>
<msg time="2026-04-10T00:45:16.207871" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:16.197929" elapsed="0.009989"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:16.197420" elapsed="0.010576"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.208624" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:16.208358" 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-10T00:45:16.213981" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:16.213571" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.214486" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:16.214192" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:16.214562" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:16.214722" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:16.213200" 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-10T00:45:16.214921" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.215594" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:16.215242" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.216042" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:16.215779" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.216617" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:16.216372" 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-10T00:45:16.217064" 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-10T00:45:16.217407" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:16.217172" 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-10T00:45:16.217655" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:16.217508" 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-10T00:45:16.217892" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:16.217736" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:16.217152" elapsed="0.000821"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:16.216895" elapsed="0.001103"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:16.216691" elapsed="0.001333"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:16.218094" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:45:16.218308" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:16.218355" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:16.212469" elapsed="0.005912"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.218835" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:16.218931" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:16.218552" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:16.219539" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:16.219247" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:16.219028" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:16.219009" 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-10T00:45:16.219882" 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-10T00:45:16.220054" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:16.220121" 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-10T00:45:16.209727" elapsed="0.010501">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:16.209471" elapsed="0.010827">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:16.209326" 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-10T00:45:16.208914" elapsed="0.011528">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:16.220682" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:16.181344" elapsed="0.039455">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:17.241536" elapsed="0.000272"/>
</kw>
<msg time="2026-04-10T00:45:17.241892" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:17.240866" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:17.240368" elapsed="0.001667"/>
</kw>
<msg time="2026-04-10T00:45:17.242082" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:17.232319" elapsed="0.009807"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:17.231881" elapsed="0.010319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.242715" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:17.242390" 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-10T00:45:17.247743" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:17.247350" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.248235" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:17.247944" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:17.248310" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:45:17.248472" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:17.246981" elapsed="0.001516"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:17.248646" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.249314" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:17.248976" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.249751" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:17.249497" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.250180" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:17.249941" 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-10T00:45:17.250602" 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-10T00:45:17.250873" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:17.250711" 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-10T00:45:17.251094" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:17.250955" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:17.251431" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:17.251169" elapsed="0.000311"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:17.250691" elapsed="0.000812"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:17.250436" elapsed="0.001092"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:17.250253" elapsed="0.001302"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:17.251594" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:17.251793" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:17.251838" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:17.246258" elapsed="0.005618"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.252319" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:17.252396" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:17.252045" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:17.253190" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:17.252703" elapsed="0.000564">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:17.252488" elapsed="0.000849">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:17.252470" elapsed="0.000898">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:17.253521" 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-10T00:45:17.253715" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:17.253783" 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-10T00:45:17.243776" elapsed="0.010131">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:17.243545" elapsed="0.010472">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:17.243403" elapsed="0.010670">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:17.243006" elapsed="0.011156">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:17.254395" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:17.221352" elapsed="0.033159">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:18.279606" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:45:18.279935" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:18.278939" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:18.278445" elapsed="0.001638"/>
</kw>
<msg time="2026-04-10T00:45:18.280129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:18.270148" elapsed="0.010026"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:18.269694" elapsed="0.010554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.280703" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:18.280442" 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-10T00:45:18.285923" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:18.285510" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.286402" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:18.286110" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:18.286478" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:18.286640" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:18.285119" 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-10T00:45:18.286817" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.287560" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:18.287202" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.288214" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:18.287749" elapsed="0.000492"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.288661" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:18.288411" 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-10T00:45:18.289104" 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-10T00:45:18.289389" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:18.289214" 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-10T00:45:18.289612" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:18.289472" 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-10T00:45:18.289828" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:18.289688" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:18.289194" elapsed="0.000810"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:18.288935" elapsed="0.001094"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:18.288736" elapsed="0.001318"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:18.290095" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:18.290299" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:18.290346" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:18.284383" elapsed="0.005987"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.290818" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:18.290913" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:18.290546" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:18.291506" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:18.291227" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:18.291008" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:18.290989" 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-10T00:45:18.291859" 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-10T00:45:18.292039" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:18.292106" 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-10T00:45:18.281812" elapsed="0.010405">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:18.281575" elapsed="0.010717">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:18.281426" elapsed="0.010921">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:18.280998" 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-10T00:45:18.292678" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:18.255353" elapsed="0.037442">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:19.318784" elapsed="0.000275"/>
</kw>
<msg time="2026-04-10T00:45:19.319135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:19.318049" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:19.317487" elapsed="0.001801"/>
</kw>
<msg time="2026-04-10T00:45:19.319335" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:19.309384" elapsed="0.009996"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:19.308905" elapsed="0.010549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.319938" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:19.319665" 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-10T00:45:19.325340" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:19.324943" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.325921" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:19.325613" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:19.325999" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:45:19.326163" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:19.324542" 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-10T00:45:19.326339" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.327012" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:19.326656" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.327435" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:19.327196" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.327855" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:19.327606" 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-10T00:45:19.328313" 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-10T00:45:19.328575" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:19.328428" 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-10T00:45:19.328799" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:19.328660" 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-10T00:45:19.329066" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:19.328920" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:19.328407" elapsed="0.000734"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:19.328117" elapsed="0.001049"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:19.327931" elapsed="0.001262"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:19.329234" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:19.329438" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:19.329485" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:19.323818" elapsed="0.005691"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.329975" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:19.330052" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:19.329682" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:19.330649" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:19.330361" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:19.330145" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:19.330126" 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-10T00:45:19.330995" 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-10T00:45:19.331167" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:19.331232" 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-10T00:45:19.321057" elapsed="0.010285">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:19.320784" elapsed="0.010628">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:19.320635" elapsed="0.010833">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:19.320227" 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-10T00:45:19.331790" elapsed="0.000083"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:19.293601" elapsed="0.038370">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:20.358136" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:45:20.358442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:20.357413" elapsed="0.001093"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:20.356877" elapsed="0.001720"/>
</kw>
<msg time="2026-04-10T00:45:20.358645" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:20.348060" elapsed="0.010631"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:20.347422" elapsed="0.011343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.359252" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:20.358991" 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-10T00:45:20.364496" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:20.364075" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.365011" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:20.364682" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:20.365086" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:20.365247" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:20.363686" 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-10T00:45:20.365424" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.366111" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:20.365746" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.366548" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:20.366306" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.366969" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:20.366717" 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-10T00:45:20.367393" 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-10T00:45:20.367646" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:20.367501" 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-10T00:45:20.367877" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:20.367725" 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-10T00:45:20.368101" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:20.367962" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:20.367481" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:20.367226" elapsed="0.000971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:20.367043" elapsed="0.001180"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:20.368263" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:20.368461" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:20.368524" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:20.362965" elapsed="0.005589"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.369082" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:20.369160" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:20.368788" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:20.369970" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:20.369468" elapsed="0.000581">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:20.369253" elapsed="0.000866">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:20.369235" elapsed="0.000916">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:20.370305" 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-10T00:45:20.370478" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:20.370544" 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-10T00:45:20.360366" elapsed="0.010287">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:20.360107" elapsed="0.010615">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:20.359961" 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-10T00:45:20.359535" elapsed="0.011349">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:20.371118" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:20.332795" elapsed="0.038441">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:21.398983" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:45:21.399301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:21.398318" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:21.397856" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:45:21.399490" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:21.386986" elapsed="0.012549"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:21.386387" elapsed="0.013222"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.400085" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:21.399810" 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-10T00:45:21.405223" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:21.404816" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.405699" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:21.405409" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:21.405775" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:21.405955" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:21.404443" 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-10T00:45:21.406238" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.407127" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:21.406563" elapsed="0.000592"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.407563" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:21.407316" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.408004" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:21.407739" 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-10T00:45:21.408453" 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-10T00:45:21.408708" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:21.408563" 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-10T00:45:21.408942" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:21.408788" 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-10T00:45:21.409250" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:21.409021" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:21.408543" elapsed="0.000786"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:21.408284" elapsed="0.001068"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:21.408078" elapsed="0.001300"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:21.409418" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:21.409620" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:21.409666" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:21.403667" elapsed="0.006023"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.410153" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:21.410230" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:21.409874" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:21.410825" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:21.410539" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:21.410323" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:21.410305" 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-10T00:45:21.411161" 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-10T00:45:21.411331" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:21.411396" 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-10T00:45:21.401164" elapsed="0.010338">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:21.400929" elapsed="0.010642">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:21.400774" elapsed="0.010870">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:21.400379" 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-10T00:45:21.411979" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:21.372918" elapsed="0.039194">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:22.440195" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:45:22.440510" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:22.439409" elapsed="0.001165"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:22.438949" elapsed="0.001705"/>
</kw>
<msg time="2026-04-10T00:45:22.440700" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:22.430631" elapsed="0.010113"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:22.430227" elapsed="0.010592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.441287" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:22.441026" 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-10T00:45:22.446656" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:22.446259" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.447155" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:22.446860" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:22.447231" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:22.447390" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:22.445883" 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-10T00:45:22.447568" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.448264" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:22.447923" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.448689" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:22.448448" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.449120" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:22.448880" 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-10T00:45:22.449537" 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-10T00:45:22.449792" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:22.449643" 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-10T00:45:22.450034" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:22.449887" 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-10T00:45:22.450251" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:22.450112" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:22.449623" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:22.449373" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:22.449193" elapsed="0.001181"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:22.450413" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:22.450613" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:22.450660" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:22.445134" elapsed="0.005556"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.451144" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:22.451222" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:22.450874" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:22.451927" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:22.451570" elapsed="0.000429">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:22.451353" elapsed="0.000746">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:22.451334" elapsed="0.000799">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:22.452288" 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-10T00:45:22.452461" elapsed="0.000041"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:22.452604" 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-10T00:45:22.442391" elapsed="0.010324">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:22.442128" elapsed="0.010656">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:22.441969" 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-10T00:45:22.441558" elapsed="0.011407">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:22.453256" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:22.412942" elapsed="0.040431">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:23.478500" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:45:23.478823" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:23.477812" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:23.477331" elapsed="0.001661"/>
</kw>
<msg time="2026-04-10T00:45:23.479038" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:23.469125" elapsed="0.009957"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:23.468680" elapsed="0.010484"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.479655" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:23.479374" 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-10T00:45:23.484917" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:23.484486" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.485416" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:23.485120" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:23.485492" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:45:23.485670" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:23.484103" 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-10T00:45:23.485864" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.486556" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:23.486187" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.487032" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:23.486745" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.487579" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:23.487283" 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-10T00:45:23.488043" 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-10T00:45:23.488302" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:23.488154" 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-10T00:45:23.488527" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:23.488384" 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-10T00:45:23.488765" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:23.488621" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:23.488134" elapsed="0.000724"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:23.487870" elapsed="0.001015"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:23.487660" elapsed="0.001250"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:23.488951" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:23.489155" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:23.489202" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:23.483350" elapsed="0.005876"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.489684" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:23.489763" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:23.489399" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:23.490564" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:23.490270" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:23.490040" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:23.489838" 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-10T00:45:23.490921" 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-10T00:45:23.491107" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:23.491177" 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-10T00:45:23.480761" elapsed="0.010538">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:23.480522" elapsed="0.010877">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:23.480367" elapsed="0.011090">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:23.479960" elapsed="0.011588">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:23.491791" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:23.454198" elapsed="0.037729">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:24.518424" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:45:24.518732" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:24.517760" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:24.517297" elapsed="0.001596"/>
</kw>
<msg time="2026-04-10T00:45:24.519041" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:24.508224" elapsed="0.010868"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:24.507612" elapsed="0.011558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.519633" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:24.519358" 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-10T00:45:24.526907" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:24.526343" elapsed="0.000851"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.528914" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:24.527759" elapsed="0.001220"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:24.529095" elapsed="0.000090"/>
</return>
<msg time="2026-04-10T00:45:24.529504" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:24.525803" elapsed="0.003760"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:24.529944" elapsed="0.000392"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.531631" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:24.530703" elapsed="0.000990"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.532340" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:24.531987" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.533106" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:24.532733" elapsed="0.000410"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:24.533812" elapsed="0.000056"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:24.534201" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:24.533996" 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-10T00:45:24.534511" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:24.534316" 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-10T00:45:24.534812" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:24.534618" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:24.533965" elapsed="0.000982"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:24.533529" elapsed="0.001452"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:24.533221" elapsed="0.001797"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:24.535074" elapsed="0.000042"/>
</return>
<msg time="2026-04-10T00:45:24.535361" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:24.535427" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:24.524790" elapsed="0.010671"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.536142" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:24.536267" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:24.535703" elapsed="0.000600"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:24.537223" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:24.536751" elapsed="0.000581">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:24.536401" elapsed="0.001028">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:24.536373" elapsed="0.001101">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:24.537692" 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-10T00:45:24.538069" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:24.538168" 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-10T00:45:24.521062" elapsed="0.017271">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:24.520724" elapsed="0.017713">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:24.520535" elapsed="0.017984">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:24.519975" elapsed="0.018681">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:24.539042" elapsed="0.000036"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:24.492787" elapsed="0.046430">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:25.563544" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:45:25.563859" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:25.562892" elapsed="0.001032"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:25.562398" elapsed="0.001606"/>
</kw>
<msg time="2026-04-10T00:45:25.564051" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:25.554215" elapsed="0.009881"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:25.553618" elapsed="0.010552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.564625" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:25.564364" 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-10T00:45:25.570992" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:25.570350" elapsed="0.000672"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.571485" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:25.571186" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:25.571561" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:25.571731" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:25.569800" elapsed="0.001955"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:25.571922" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.572586" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:25.572242" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.573038" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:25.572770" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.573457" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:25.573217" 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-10T00:45:25.573903" 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-10T00:45:25.574248" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:25.574022" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:25.574481" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:25.574336" elapsed="0.000248"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:25.574785" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:25.574616" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:25.574003" elapsed="0.000887"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:25.573712" elapsed="0.001204"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:25.573530" elapsed="0.001413"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:25.574983" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:25.575199" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:25.575247" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:25.568771" elapsed="0.006500"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.577393" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:25.577511" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:25.575452" elapsed="0.002086"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:25.578204" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:25.577906" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:25.577613" elapsed="0.000733">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:25.577593" 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-10T00:45:25.578558" 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-10T00:45:25.578744" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:25.578813" 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-10T00:45:25.565674" elapsed="0.013297">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:25.565445" elapsed="0.013625">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:25.565307" elapsed="0.013843">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:25.564912" elapsed="0.014365">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:25.579607" elapsed="0.000035"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:25.540072" elapsed="0.039701">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:26.606139" elapsed="0.000283"/>
</kw>
<msg time="2026-04-10T00:45:26.606490" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:26.605370" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:26.604902" elapsed="0.001731"/>
</kw>
<msg time="2026-04-10T00:45:26.606680" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:26.595748" elapsed="0.010976"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:26.595183" elapsed="0.011615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.607338" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:26.607004" 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-10T00:45:26.612744" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:26.612355" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.613237" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:26.612947" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:26.613312" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:26.613473" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:26.611974" elapsed="0.001524"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:26.613650" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.614417" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:26.613980" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.614858" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:26.614602" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.615270" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:26.615032" 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-10T00:45:26.615689" 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-10T00:45:26.615959" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:26.615797" 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-10T00:45:26.616185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:26.616044" 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-10T00:45:26.616420" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:26.616265" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:26.615777" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:26.615524" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:26.615342" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:26.616588" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:26.616791" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:26.616839" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:26.611082" elapsed="0.005799"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.617329" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:26.617408" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:26.617055" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:26.618028" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:26.617721" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:26.617503" elapsed="0.000686">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:26.617484" 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-10T00:45:26.618374" 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-10T00:45:26.618549" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:26.618616" 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-10T00:45:26.608393" elapsed="0.010331">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:26.608160" elapsed="0.010677">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:26.608020" 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-10T00:45:26.607611" elapsed="0.011401">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:26.619248" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:26.580583" elapsed="0.038781">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:27.646939" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:45:27.647248" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:27.646286" elapsed="0.001024"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:27.645804" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:45:27.647434" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:27.637624" elapsed="0.009855"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:27.637204" elapsed="0.010348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.648014" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:27.647741" 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-10T00:45:27.653117" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:27.652712" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.653596" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:27.653305" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:27.653670" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:27.653934" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:27.652321" elapsed="0.001639"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:27.654112" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.654762" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:27.654426" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.655203" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:27.654960" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.655612" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:27.655374" 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-10T00:45:27.656047" 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-10T00:45:27.656295" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:27.656153" 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-10T00:45:27.656512" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:27.656374" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:27.656726" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:27.656588" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:27.656134" elapsed="0.000747"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:27.655881" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:27.655683" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:27.656971" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:27.657172" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:27.657219" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:27.651588" elapsed="0.005655"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.657692" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:27.657784" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:27.657414" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:27.658600" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:27.658134" elapsed="0.000538">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:27.657913" elapsed="0.000826">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:27.657882" 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-10T00:45:27.658940" 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-10T00:45:27.659113" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:27.659180" 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-10T00:45:27.649060" elapsed="0.010227">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:27.648816" elapsed="0.010541">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:27.648677" elapsed="0.010735">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:27.648284" elapsed="0.011220">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:27.659735" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:27.620201" elapsed="0.039665">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:28.687026" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:45:28.687346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:28.686295" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:28.685688" elapsed="0.001809"/>
</kw>
<msg time="2026-04-10T00:45:28.687544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:28.677412" elapsed="0.010180"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:28.676834" elapsed="0.010836"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.688171" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:28.687894" 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-10T00:45:28.693514" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:28.693063" elapsed="0.000482"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.694132" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:28.693809" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:28.694209" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:45:28.694374" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:28.692640" elapsed="0.001760"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:28.694553" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.695385" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:28.695037" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.696080" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:28.695571" elapsed="0.000537"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.696502" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:28.696257" 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-10T00:45:28.696969" 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-10T00:45:28.697231" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:28.697085" 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-10T00:45:28.697560" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:28.697402" 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-10T00:45:28.697783" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:28.697640" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:28.697065" elapsed="0.000814"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:28.696773" elapsed="0.001131"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:28.696579" elapsed="0.001351"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:28.697972" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:28.698183" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:28.698230" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:28.691896" elapsed="0.006357"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.698716" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:28.698795" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:28.698424" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:28.699413" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:28.699129" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:28.698907" elapsed="0.000643">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:28.698886" 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-10T00:45:28.699736" 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-10T00:45:28.699925" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:28.699995" 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-10T00:45:28.689274" elapsed="0.010831">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:28.689030" elapsed="0.011146">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:28.688883" elapsed="0.011349">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:28.688460" elapsed="0.011863">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:28.700562" elapsed="0.000089"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:28.660644" elapsed="0.040105">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:29.727305" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:45:29.727608" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:29.726591" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:29.726051" elapsed="0.001701"/>
</kw>
<msg time="2026-04-10T00:45:29.727799" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:29.717094" 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-10T00:45:29.716389" elapsed="0.011550"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.728395" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:29.728137" 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-10T00:45:29.733926" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:29.733466" elapsed="0.000496"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.734431" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:29.734136" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:29.734506" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:45:29.734672" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:29.733083" elapsed="0.001615"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:29.734869" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.735541" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:29.735194" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.735986" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:29.735726" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.736541" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:29.736157" elapsed="0.000411"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:29.737072" 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-10T00:45:29.737335" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:29.737188" 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-10T00:45:29.737554" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:29.737415" 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-10T00:45:29.737777" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:29.737631" elapsed="0.000238"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:29.737168" elapsed="0.000729"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:29.736896" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:29.736679" elapsed="0.001268"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:29.737987" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:29.738194" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:29.738241" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:29.732338" elapsed="0.005927"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.738804" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:29.738901" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:29.738516" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:29.739507" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:29.739222" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:29.738999" elapsed="0.000645">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:29.738979" 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-10T00:45:29.739828" elapsed="0.000038"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:29.740019" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:29.740087" 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-10T00:45:29.729470" elapsed="0.010733">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:29.729235" elapsed="0.011040">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:29.729093" 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-10T00:45:29.728675" 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-10T00:45:29.740665" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:29.701539" elapsed="0.039245">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:30.765961" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:45:30.766261" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:30.765278" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:30.764800" elapsed="0.001602"/>
</kw>
<msg time="2026-04-10T00:45:30.766448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:30.756244" 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-10T00:45:30.755652" elapsed="0.010916"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.767036" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:30.766762" 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-10T00:45:30.772087" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:30.771684" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.772564" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:30.772272" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:30.772638" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:30.772794" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:30.771317" elapsed="0.001503"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:30.773055" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.773741" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:30.773383" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.774190" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:30.773946" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.774602" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:30.774362" 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-10T00:45:30.775050" 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-10T00:45:30.775300" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:30.775158" 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-10T00:45:30.775525" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:30.775380" 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-10T00:45:30.775744" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:30.775603" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:30.775138" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:30.774883" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:30.774677" elapsed="0.001211"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:30.775928" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:30.776133" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:30.776180" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:30.770593" elapsed="0.005610"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.776642" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:30.776720" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:30.776372" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:30.777509" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:30.777225" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:30.776813" elapsed="0.000847">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:30.776795" 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-10T00:45:30.777860" 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-10T00:45:30.778032" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:30.778098" 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-10T00:45:30.768082" elapsed="0.010121">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:30.767837" elapsed="0.010435">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:30.767698" elapsed="0.010629">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:30.767307" elapsed="0.011108">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:30.778642" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:30.741585" elapsed="0.037170">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:31.804694" elapsed="0.000263"/>
</kw>
<msg time="2026-04-10T00:45:31.805026" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:31.803946" elapsed="0.001146"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:31.803471" elapsed="0.001701"/>
</kw>
<msg time="2026-04-10T00:45:31.805217" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:31.794488" 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-10T00:45:31.793922" elapsed="0.011412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.805796" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:31.805524" 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-10T00:45:31.811030" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:31.810627" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.811500" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:31.811214" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:31.811574" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:31.811732" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:31.810262" elapsed="0.001495"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:31.811921" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.812567" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:31.812234" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.813002" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:31.812746" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.813411" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:31.813171" 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-10T00:45:31.813859" 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-10T00:45:31.814112" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:31.813969" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:31.814326" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:31.814191" elapsed="0.000188"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:31.814539" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:31.814402" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:31.813949" elapsed="0.000663"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:31.813677" elapsed="0.000959"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:31.813483" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:31.814707" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:31.814921" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:31.814967" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:31.809505" elapsed="0.005485"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.815434" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:31.815509" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:31.815165" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:31.816211" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:31.815931" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:31.815645" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:31.815627" 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-10T00:45:31.816529" 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-10T00:45:31.816698" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:31.816764" 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-10T00:45:31.806876" elapsed="0.010008">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:31.806626" elapsed="0.010331">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:31.806484" elapsed="0.010534">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:31.806087" elapsed="0.011021">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:31.817337" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:31.779505" elapsed="0.037946">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:32.844817" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:45:32.845153" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:32.844163" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:32.843684" elapsed="0.001615"/>
</kw>
<msg time="2026-04-10T00:45:32.845346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:32.832716" elapsed="0.012675"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:32.832138" elapsed="0.013328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.845972" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:32.845667" elapsed="0.000350"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.851170" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:32.850761" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.851647" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:32.851356" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:32.851721" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:32.851901" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:32.850377" 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-10T00:45:32.852077" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.852732" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:32.852396" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.853166" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:32.852926" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.853643" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:32.853403" 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-10T00:45:32.854109" 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-10T00:45:32.854363" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:32.854218" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:32.854579" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:32.854442" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:32.854793" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:32.854655" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:32.854198" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:32.853943" elapsed="0.000964"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:32.853741" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:32.854974" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:32.855176" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:32.855223" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:32.849619" elapsed="0.005627"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.855876" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:32.855959" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:32.855414" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:32.856557" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:32.856275" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:32.856056" elapsed="0.000639">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:32.856037" 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-10T00:45:32.856896" 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-10T00:45:32.857068" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:32.857135" 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-10T00:45:32.847054" elapsed="0.010188">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:32.846794" elapsed="0.010518">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:32.846647" elapsed="0.010720">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:32.846247" elapsed="0.011209">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:32.857701" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:32.818272" elapsed="0.039545">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:33.884457" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:45:33.884784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:33.883785" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:33.883328" elapsed="0.001632"/>
</kw>
<msg time="2026-04-10T00:45:33.885093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:33.874074" elapsed="0.011067"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:33.873481" elapsed="0.011737"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.885707" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:33.885413" 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-10T00:45:33.891057" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:33.890652" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.891527" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:33.891243" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:33.891603" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:33.891763" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:33.890282" elapsed="0.001506"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:33.891954" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.892599" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:33.892267" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.893035" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:33.892779" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.893446" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:33.893207" 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-10T00:45:33.893936" 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-10T00:45:33.894205" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:33.894056" 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-10T00:45:33.894424" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:33.894286" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:33.894639" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:33.894501" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:33.894036" elapsed="0.000676"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:33.893697" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:33.893517" elapsed="0.001246"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:33.894803" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:33.895021" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:33.895067" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:33.889474" elapsed="0.005616"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.895526" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:33.895602" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:33.895258" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:33.896215" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:33.895938" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:33.895693" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:33.895675" 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-10T00:45:33.896530" 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-10T00:45:33.896739" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:33.896804" 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-10T00:45:33.886789" elapsed="0.010140">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:33.886552" elapsed="0.010448">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:33.886407" elapsed="0.010647">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:33.886015" elapsed="0.011128">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:33.897382" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:33.858607" elapsed="0.038890">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:34.923353" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:45:34.923660" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:34.922684" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:34.922227" elapsed="0.001574"/>
</kw>
<msg time="2026-04-10T00:45:34.923861" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:34.914163" elapsed="0.009745"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:34.913724" elapsed="0.010258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.924422" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:34.924165" 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-10T00:45:34.929499" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:34.929114" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.929988" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:34.929683" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:34.930062" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:34.930248" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:34.928730" 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-10T00:45:34.930438" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.931107" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:34.930757" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.931522" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:34.931287" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.931940" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:34.931691" 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-10T00:45:34.932351" 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-10T00:45:34.932669" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:34.932458" 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-10T00:45:34.932911" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:34.932751" 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-10T00:45:34.933129" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:34.932989" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:34.932438" elapsed="0.000763"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:34.932189" elapsed="0.001037"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:34.932011" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:34.933290" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:34.933489" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:34.933534" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:34.928005" elapsed="0.005552"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.934013" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:34.934090" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:34.933725" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:34.934881" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:34.934408" elapsed="0.000550">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:34.934194" elapsed="0.000831">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:34.934176" elapsed="0.000880">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:34.935208" 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-10T00:45:34.935390" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:34.935455" 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-10T00:45:34.925463" elapsed="0.010098">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:34.925234" elapsed="0.010393">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:34.925096" elapsed="0.010586">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:34.924690" elapsed="0.011078">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:34.936011" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:34.898366" elapsed="0.037760">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:35.961080" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:45:35.961399" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:35.960415" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:35.959947" elapsed="0.001605"/>
</kw>
<msg time="2026-04-10T00:45:35.961598" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:35.951876" elapsed="0.009767"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:35.951416" elapsed="0.010302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.962261" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:35.961924" 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-10T00:45:35.967381" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:35.966988" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.967876" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:35.967568" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:35.967955" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:35.968115" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:35.966593" 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-10T00:45:35.968293" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.968961" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:35.968608" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.969588" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:35.969145" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.970026" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:35.969764" 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-10T00:45:35.970448" 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-10T00:45:35.970736" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:35.970583" 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-10T00:45:35.970974" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:35.970817" 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-10T00:45:35.971192" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:35.971052" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:35.970562" elapsed="0.000704"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:35.970283" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:35.970099" elapsed="0.001218"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:35.971356" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:35.971559" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:35.971605" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:35.965838" elapsed="0.005790"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.972088" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:35.972165" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:35.971797" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:35.972752" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:35.972475" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:35.972258" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:35.972240" 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-10T00:45:35.973087" 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-10T00:45:35.973257" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:35.973322" 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-10T00:45:35.963340" elapsed="0.010090">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:35.963107" elapsed="0.010437">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:35.962965" elapsed="0.010635">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:35.962535" elapsed="0.011154">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:35.973940" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:35.936970" elapsed="0.037087">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:36.995142" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:45:36.995472" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:36.994384" elapsed="0.001155"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:36.993899" elapsed="0.001737"/>
</kw>
<msg time="2026-04-10T00:45:36.995693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:36.985582" elapsed="0.010160"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:36.985056" elapsed="0.010764"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:36.996294" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:36.996030" 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-10T00:45:37.001753" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:37.001346" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.002263" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:37.001961" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:37.002339" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:37.002503" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:37.000968" 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-10T00:45:37.002686" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.003425" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:37.003070" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.003910" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:37.003614" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.004332" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:37.004089" 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-10T00:45:37.004755" 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-10T00:45:37.005049" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:37.004885" 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-10T00:45:37.005271" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:37.005131" 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-10T00:45:37.005494" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:37.005348" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:37.004864" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:37.004588" elapsed="0.001070"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:37.004404" elapsed="0.001280"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:37.005723" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:37.005951" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:37.005998" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:37.000218" elapsed="0.005804"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.006476" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:37.006555" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:37.006195" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:37.007257" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:37.006905" elapsed="0.000424">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:37.006650" elapsed="0.000745">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:37.006632" elapsed="0.000796">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:37.007583" 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-10T00:45:37.007756" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:37.007855" 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-10T00:45:36.997374" elapsed="0.010609">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:36.997140" elapsed="0.010914">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:36.996998" elapsed="0.011113">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:36.996573" elapsed="0.011629">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:37.008439" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:36.974601" elapsed="0.033955">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:38.035142" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:45:38.035453" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:38.034361" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:38.033887" elapsed="0.001738"/>
</kw>
<msg time="2026-04-10T00:45:38.035709" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:38.025283" 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-10T00:45:38.024860" elapsed="0.011012"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.036464" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:38.036192" 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-10T00:45:38.042610" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:38.042146" elapsed="0.000494"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.043319" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:38.043004" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:38.043475" elapsed="0.000114"/>
</return>
<msg time="2026-04-10T00:45:38.043764" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:38.041633" elapsed="0.002173"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:38.044023" elapsed="0.000210"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.044918" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:38.044399" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.045411" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:38.045157" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.045894" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:38.045586" 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-10T00:45:38.046428" 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-10T00:45:38.046684" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:38.046539" 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-10T00:45:38.047075" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:38.046911" 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-10T00:45:38.047302" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:38.047159" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:38.046520" elapsed="0.000857"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:38.046255" elapsed="0.001146"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:38.045974" elapsed="0.001453"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:38.047467" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:38.047704" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:38.047771" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:38.040625" elapsed="0.007178"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.048283" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:38.048360" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:38.047999" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:38.049182" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:38.048669" elapsed="0.000592">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:38.048451" elapsed="0.000880">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:38.048433" elapsed="0.000929">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:38.049518" 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-10T00:45:38.049692" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:38.049758" 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-10T00:45:38.037761" elapsed="0.012140">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:38.037438" elapsed="0.012535">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:38.037295" elapsed="0.012733">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:38.036808" elapsed="0.013309">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:38.050352" elapsed="0.000062"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:38.009463" elapsed="0.041050">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:39.076269" elapsed="0.000263"/>
</kw>
<msg time="2026-04-10T00:45:39.076599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:39.075595" elapsed="0.001067"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:39.075124" elapsed="0.001622"/>
</kw>
<msg time="2026-04-10T00:45:39.076794" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:39.065700" elapsed="0.011157"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:39.065122" elapsed="0.011815"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.077394" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:39.077128" 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-10T00:45:39.082709" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:39.082302" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.083250" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:39.082915" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:39.083329" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:39.083487" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:39.081881" elapsed="0.001630"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:39.083663" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.084568" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:39.083995" elapsed="0.000601"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.085026" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:39.084756" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.085445" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:39.085202" 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-10T00:45:39.085887" 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-10T00:45:39.086144" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:39.085998" 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-10T00:45:39.086422" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:39.086281" 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-10T00:45:39.086668" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:39.086499" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:39.085978" elapsed="0.000768"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:39.085703" elapsed="0.001067"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:39.085518" elapsed="0.001279"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:39.086837" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:45:39.087071" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:39.087120" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:39.081087" elapsed="0.006056"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.087891" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:39.087971" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:39.087594" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:39.088618" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:39.088287" elapsed="0.000404">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:39.088067" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:39.088048" elapsed="0.000744">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:39.088964" 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-10T00:45:39.089138" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:39.089204" 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-10T00:45:39.078463" elapsed="0.010851">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:39.078228" elapsed="0.011158">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:39.078087" elapsed="0.011355">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:39.077672" elapsed="0.011861">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:39.089766" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:39.051148" elapsed="0.038752">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:40.116421" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:45:40.116740" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:40.115748" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:40.115277" elapsed="0.001625"/>
</kw>
<msg time="2026-04-10T00:45:40.116949" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:40.106007" 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-10T00:45:40.105407" elapsed="0.011662"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.117538" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:40.117279" 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-10T00:45:40.123123" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:40.122713" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.123605" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:40.123308" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:40.123680" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:40.123866" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:40.122337" 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-10T00:45:40.124144" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.124840" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:40.124478" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.125315" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:40.125052" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.125736" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:40.125496" 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-10T00:45:40.126179" 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-10T00:45:40.126434" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:40.126288" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:40.126650" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:40.126514" elapsed="0.000189"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:40.126878" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:40.126726" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:40.126269" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:40.126011" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:40.125809" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:40.127047" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:40.127249" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:40.127296" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:40.121534" elapsed="0.005785"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.127766" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:40.127856" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:40.127487" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:40.128459" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:40.128170" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:40.127950" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:40.127932" 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-10T00:45:40.128781" 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-10T00:45:40.128967" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:40.129033" 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-10T00:45:40.118615" elapsed="0.010550">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:40.118377" elapsed="0.010859">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:40.118233" elapsed="0.011057">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:40.117819" elapsed="0.011559">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:40.129605" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:40.090758" elapsed="0.038961">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:41.153445" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:45:41.153760" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:41.152683" elapsed="0.001142"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:41.152217" elapsed="0.001705"/>
</kw>
<msg time="2026-04-10T00:45:41.153969" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:41.144165" elapsed="0.009862"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:41.143731" elapsed="0.010371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.154553" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:41.154295" 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-10T00:45:41.159604" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:41.159210" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.160098" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:41.159790" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:41.160173" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:41.160334" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:41.158820" 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-10T00:45:41.160510" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.161176" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:41.160826" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.161596" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:41.161358" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.162051" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:41.161770" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:41.162478" 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-10T00:45:41.162730" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:41.162586" 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-10T00:45:41.162961" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:41.162809" 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-10T00:45:41.163177" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:41.163038" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:41.162566" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:41.162312" elapsed="0.000962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:41.162125" elapsed="0.001174"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:41.163338" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:41.163537" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:41.163582" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:41.158114" elapsed="0.005494"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.164073" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:41.164149" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:41.163783" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:41.164997" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:41.164687" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:41.164463" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:41.164271" elapsed="0.000899">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:41.165323" 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-10T00:45:41.165521" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:41.165597" 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-10T00:45:41.155612" elapsed="0.010105">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:41.155382" elapsed="0.010409">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:41.155239" elapsed="0.010631">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:41.154830" elapsed="0.011151">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:41.166225" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:41.130494" elapsed="0.035850">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:42.198530" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:45:42.198867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:42.197724" elapsed="0.001245"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:42.196952" elapsed="0.002108"/>
</kw>
<msg time="2026-04-10T00:45:42.199109" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:42.181838" elapsed="0.017318"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:42.181267" elapsed="0.017973"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.200376" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:42.199961" 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-10T00:45:42.208037" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:42.207635" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.208509" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:42.208222" elapsed="0.000826"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:42.209099" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:42.209262" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:42.207259" 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-10T00:45:42.209439" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.210653" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:42.210148" elapsed="0.000534"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.211565" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:42.210899" elapsed="0.000695"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.212090" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:42.211821" 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-10T00:45:42.212582" 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-10T00:45:42.212856" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:42.212695" 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-10T00:45:42.213081" elapsed="0.001021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:42.212939" elapsed="0.001208"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:42.214336" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:42.214178" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:42.212675" elapsed="0.001742"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:42.212387" elapsed="0.002054"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:42.212164" elapsed="0.002303"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:42.214510" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:42.214771" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:42.214822" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:42.206298" elapsed="0.008563"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.215365" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:42.215445" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:42.215057" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:42.216075" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:42.215770" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:42.215538" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:42.215519" elapsed="0.000746">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:42.216417" 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-10T00:45:42.216590" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:42.216657" 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-10T00:45:42.201917" elapsed="0.014847">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:42.201654" elapsed="0.015182">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:42.201076" elapsed="0.015850">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:42.200660" elapsed="0.016359">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:42.217276" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:42.167400" elapsed="0.049999">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:43.245898" elapsed="0.000311"/>
</kw>
<msg time="2026-04-10T00:45:43.246283" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:43.245200" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:43.244719" elapsed="0.001713"/>
</kw>
<msg time="2026-04-10T00:45:43.246553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:43.234242" elapsed="0.012360"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:43.233803" elapsed="0.012876"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.247162" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:43.246898" 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-10T00:45:43.252692" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:43.252288" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.253206" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:43.252912" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:43.253281" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:43.253449" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:43.251888" 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-10T00:45:43.253625" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.254292" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:43.253958" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.254722" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:43.254481" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.255145" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:43.254907" 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-10T00:45:43.255579" 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-10T00:45:43.255859" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:43.255694" 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-10T00:45:43.256120" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:43.255977" 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-10T00:45:43.256334" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:43.256196" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:43.255671" elapsed="0.000736"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:43.255403" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:43.255216" elapsed="0.001242"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:43.256498" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:43.256708" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:43.256776" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:43.251151" elapsed="0.005657"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.259733" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:43.259865" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:43.257063" elapsed="0.002839"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:43.260731" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:43.260333" elapsed="0.000492">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:43.260023" elapsed="0.000925">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:43.259995" elapsed="0.000996">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:43.261202" 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-10T00:45:43.261500" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:43.261593" 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-10T00:45:43.248319" elapsed="0.013422">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:43.248069" elapsed="0.013766">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:43.247856" elapsed="0.014146">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:43.247437" elapsed="0.014692">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:43.262454" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:43.218273" elapsed="0.044339">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:44.287451" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:45:44.287762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:44.286793" elapsed="0.001033"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:44.286333" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:45:44.287968" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:44.278308" elapsed="0.009705"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:44.277895" elapsed="0.010191"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.288532" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:44.288273" 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-10T00:45:44.293860" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:44.293451" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.294338" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:44.294049" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:44.294413" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:44.294572" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:44.293076" 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-10T00:45:44.294747" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.295413" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:44.295079" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.295838" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:44.295593" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.296263" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:44.296026" 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-10T00:45:44.296679" 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-10T00:45:44.297020" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:44.296791" 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-10T00:45:44.297267" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:44.297125" 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-10T00:45:44.297483" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:44.297344" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:44.296772" elapsed="0.000785"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:44.296515" elapsed="0.001067"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:44.296334" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:44.297647" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:44.297861" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:44.297910" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:44.292321" elapsed="0.005613"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.298375" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:44.298451" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:44.298104" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:44.299052" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:44.298757" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:44.298543" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:44.298525" 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-10T00:45:44.299371" 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-10T00:45:44.299543" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:44.299609" 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-10T00:45:44.289617" elapsed="0.010100">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:44.289384" elapsed="0.010401">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:44.289242" elapsed="0.010598">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:44.288801" elapsed="0.011146">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:44.300178" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:44.263507" elapsed="0.036786">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:45.328610" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:45:45.328921" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:45.327966" elapsed="0.001016"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:45.327497" elapsed="0.001563"/>
</kw>
<msg time="2026-04-10T00:45:45.329106" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:45.318112" elapsed="0.011039"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:45.317500" elapsed="0.011725"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.329757" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:45.329423" elapsed="0.000379"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.334835" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:45.334442" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.335351" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:45.335039" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:45.335426" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:45.335584" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:45.334038" 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-10T00:45:45.335784" elapsed="0.000190"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.336467" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:45.336133" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.336904" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:45.336649" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.337317" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:45.337075" 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-10T00:45:45.337730" 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-10T00:45:45.337999" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:45.337836" 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-10T00:45:45.338218" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:45.338080" 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-10T00:45:45.338453" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:45.338308" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:45.337817" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:45.337566" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:45.337388" elapsed="0.001187"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:45.338615" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:45.338813" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:45.338876" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:45.333316" elapsed="0.005584"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.339337" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:45.339413" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:45.339068" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:45.340208" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:45.339724" elapsed="0.000558">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:45.339511" elapsed="0.000838">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:45.339493" 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-10T00:45:45.340534" 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-10T00:45:45.340706" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:45.340771" 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-10T00:45:45.330829" elapsed="0.010065">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:45.330596" elapsed="0.010419">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:45.330457" elapsed="0.010614">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:45.330049" elapsed="0.011111">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:45.341400" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:45.301106" elapsed="0.040412">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:46.367228" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:45:46.367541" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:46.366570" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:46.366105" elapsed="0.001593"/>
</kw>
<msg time="2026-04-10T00:45:46.367744" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:46.357306" 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-10T00:45:46.356711" elapsed="0.011169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.368368" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:46.368072" 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-10T00:45:46.373739" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:46.373315" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.374270" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:46.373952" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:46.374356" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:45:46.374530" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:46.372917" 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-10T00:45:46.374716" elapsed="0.000191"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.375443" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:46.375073" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.376151" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:46.375654" elapsed="0.000526"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.376609" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:46.376336" 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-10T00:45:46.377075" 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-10T00:45:46.377339" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:46.377189" 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-10T00:45:46.377576" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:46.377431" 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-10T00:45:46.377800" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:46.377655" elapsed="0.000282"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:46.377169" elapsed="0.000795"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:46.376896" elapsed="0.001094"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:46.376686" elapsed="0.001330"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:46.378059" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:46.378275" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:46.378325" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:46.372142" elapsed="0.006208"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.378825" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:46.378927" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:46.378536" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:46.379575" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:46.379252" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:46.379028" elapsed="0.000695">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:46.379008" 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-10T00:45:46.379931" 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-10T00:45:46.380111" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:46.380181" 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-10T00:45:46.369527" elapsed="0.010770">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:46.369287" elapsed="0.011084">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:46.369123" elapsed="0.011314">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:46.368661" elapsed="0.011875">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:46.380777" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:46.342246" elapsed="0.038671">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:47.405816" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:45:47.406135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:47.405146" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:47.404646" elapsed="0.001629"/>
</kw>
<msg time="2026-04-10T00:45:47.406320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:47.396102" elapsed="0.010263"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:47.395447" elapsed="0.010992"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.406904" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:47.406626" 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-10T00:45:47.412259" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:47.411865" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.412817" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:47.412520" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:47.412931" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:45:47.413099" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:47.411479" elapsed="0.001645"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:45:47.413278" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.413987" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:47.413620" elapsed="0.000394"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.414414" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:47.414172" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.414825" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:47.414586" 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-10T00:45:47.415265" 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-10T00:45:47.415518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:47.415374" 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-10T00:45:47.415748" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:47.415598" 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-10T00:45:47.415981" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:47.415826" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:47.415355" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:47.415099" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:47.414915" elapsed="0.001191"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:47.416145" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:47.416349" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:47.416396" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:47.410739" elapsed="0.005681"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.416888" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:47.416972" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:47.416590" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:47.417564" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:47.417283" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:47.417066" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:47.417048" 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-10T00:45:47.417898" 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-10T00:45:47.418077" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:47.418143" 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-10T00:45:47.407965" elapsed="0.010287">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:47.407718" elapsed="0.010604">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:47.407579" elapsed="0.010796">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:47.407180" elapsed="0.011284">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:47.418695" elapsed="0.000065"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:47.381749" elapsed="0.037123">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:48.443389" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:45:48.443691" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:48.442726" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:48.442254" elapsed="0.001579"/>
</kw>
<msg time="2026-04-10T00:45:48.443897" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:48.433965" elapsed="0.009980"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:48.433378" elapsed="0.010643"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.444475" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:48.444214" 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-10T00:45:48.449562" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:48.449172" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.450051" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:48.449746" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:48.450126" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:48.450283" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:48.448789" 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-10T00:45:48.450471" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.451227" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:48.450807" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.451666" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:48.451424" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.452087" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:48.451835" 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-10T00:45:48.452508" 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-10T00:45:48.452774" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:48.452615" 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-10T00:45:48.453016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:48.452868" 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-10T00:45:48.453232" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:48.453093" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:48.452596" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:48.452343" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:48.452158" elapsed="0.001195"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:48.453392" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:48.453590" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:48.453636" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:48.448071" elapsed="0.005587"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.454183" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:48.454261" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:48.453909" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:48.455066" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:48.454760" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:48.454368" elapsed="0.000840">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:48.454349" 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-10T00:45:48.455393" 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-10T00:45:48.455564" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:48.455630" 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-10T00:45:48.445524" elapsed="0.010213">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:48.445296" elapsed="0.010511">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:48.445158" elapsed="0.010718">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:48.444749" elapsed="0.011218">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:48.456195" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:48.419671" elapsed="0.036640">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:49.480794" elapsed="0.000277"/>
</kw>
<msg time="2026-04-10T00:45:49.481140" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:49.480083" elapsed="0.001125"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:49.479549" elapsed="0.001743"/>
</kw>
<msg time="2026-04-10T00:45:49.481360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:49.471125" 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-10T00:45:49.470668" elapsed="0.010849"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.481994" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:49.481708" 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-10T00:45:49.487720" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:49.487314" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.488263" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:49.487962" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:49.488339" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:49.488508" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:49.486939" 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-10T00:45:49.488771" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.489500" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:49.489125" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.489975" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:49.489697" elapsed="0.000307"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.490407" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:49.490153" 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-10T00:45:49.490868" 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-10T00:45:49.491141" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:49.490993" 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-10T00:45:49.491361" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:49.491223" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:49.491596" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:49.491438" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:49.490973" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:49.490675" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:49.490487" elapsed="0.001243"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:49.491770" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:45:49.492044" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:49.492094" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:49.486169" elapsed="0.005949"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.492608" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:49.492697" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:49.492294" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:49.493373" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:49.493065" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:49.492793" elapsed="0.000726">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:49.492774" 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-10T00:45:49.493740" 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-10T00:45:49.493959" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:49.494035" 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-10T00:45:49.483181" elapsed="0.010969">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:49.482934" elapsed="0.011301">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:49.482727" elapsed="0.011566">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:49.482272" elapsed="0.012115">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:49.494642" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:49.457258" elapsed="0.037527">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:50.521871" elapsed="0.000306"/>
</kw>
<msg time="2026-04-10T00:45:50.522244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:50.520859" elapsed="0.001450"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:50.520358" elapsed="0.002032"/>
</kw>
<msg time="2026-04-10T00:45:50.522437" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:50.512014" elapsed="0.010469"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:50.511387" elapsed="0.011172"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.523049" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:50.522767" 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-10T00:45:50.528317" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:50.527912" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.528855" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:50.528510" elapsed="0.000374"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:50.528935" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:45:50.529095" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:50.527530" 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-10T00:45:50.529297" elapsed="0.000215"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.530056" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:50.529672" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.530475" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:50.530237" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.530890" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:50.530643" 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-10T00:45:50.531385" 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-10T00:45:50.531693" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:50.531508" elapsed="0.000246"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:50.531937" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:50.531780" 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-10T00:45:50.532155" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:50.532016" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:50.531484" elapsed="0.000743"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:50.531177" elapsed="0.001074"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:50.530963" elapsed="0.001314"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:50.532333" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:45:50.532560" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:50.532606" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:50.526796" elapsed="0.005833"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.533323" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:50.533423" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:50.532816" elapsed="0.000683"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:50.534179" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:50.533861" elapsed="0.000407">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:50.533573" elapsed="0.000766">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:50.533554" 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-10T00:45:50.534538" 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-10T00:45:50.534713" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:50.534787" elapsed="0.000086"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:45:50.524147" elapsed="0.010846">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:50.523880" elapsed="0.011186">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:50.523728" elapsed="0.011392">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:50.523331" elapsed="0.011877">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:50.535441" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:50.495594" elapsed="0.039963">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:51.561796" elapsed="0.000272"/>
</kw>
<msg time="2026-04-10T00:45:51.562139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:51.561134" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:51.560636" elapsed="0.001652"/>
</kw>
<msg time="2026-04-10T00:45:51.562340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:51.552469" elapsed="0.009916"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:51.552018" elapsed="0.010447"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.562941" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:51.562662" 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-10T00:45:51.568786" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:51.568383" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.569340" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:51.569011" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:51.569418" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:45:51.569591" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:51.568004" 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-10T00:45:51.569786" elapsed="0.000200"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.570529" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:51.570147" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.571034" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:51.570731" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.571541" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:51.571294" 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-10T00:45:51.572018" 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-10T00:45:51.572299" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:51.572132" 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-10T00:45:51.572525" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:51.572384" 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-10T00:45:51.572748" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:51.572602" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:51.572112" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:51.571819" elapsed="0.001043"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:51.571618" elapsed="0.001273"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:51.572933" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:51.573140" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:51.573188" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:51.567239" elapsed="0.005972"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.573664" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:51.573740" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:51.573382" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:51.574364" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:51.574073" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:51.573835" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:51.573816" 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-10T00:45:51.574732" 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-10T00:45:51.574923" elapsed="0.000054"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:51.575038" elapsed="0.000030"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:45:51.564152" elapsed="0.011052">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:51.563821" elapsed="0.011469">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:51.563672" elapsed="0.011677">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:51.563240" elapsed="0.012317">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:51.575804" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:51.536419" elapsed="0.039523">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:52.605366" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:45:52.605681" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:52.604693" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:52.604197" elapsed="0.001630"/>
</kw>
<msg time="2026-04-10T00:45:52.605962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:52.593943" elapsed="0.012067"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:52.593293" elapsed="0.012793"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.606543" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:52.606278" 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-10T00:45:52.611691" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:52.611303" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.612220" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:52.611892" elapsed="0.000355"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:52.612295" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:52.612464" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:52.610937" 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-10T00:45:52.612708" elapsed="0.000200"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.613448" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:52.613072" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.613892" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:52.613632" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.614300" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:52.614065" 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-10T00:45:52.614730" 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-10T00:45:52.615000" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:52.614839" 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-10T00:45:52.615228" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:52.615091" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:52.615444" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:52.615304" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:52.614819" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:52.614563" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:52.614373" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:52.615605" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:52.615804" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:52.615865" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:52.610121" elapsed="0.005769"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.616330" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:52.616407" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:52.616058" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:52.617214" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:52.616729" elapsed="0.000563">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:52.616499" elapsed="0.000861">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:52.616481" 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-10T00:45:52.617544" 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-10T00:45:52.617754" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:52.617821" 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-10T00:45:52.607608" elapsed="0.010337">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:52.607376" elapsed="0.010639">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:52.607237" elapsed="0.010831">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:52.606820" 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-10T00:45:52.618393" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:52.576762" elapsed="0.041768">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:53.646553" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:45:53.646880" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:53.645870" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:53.645400" elapsed="0.001626"/>
</kw>
<msg time="2026-04-10T00:45:53.647071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:53.637382" elapsed="0.009733"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:53.636968" elapsed="0.010220"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.647638" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:53.647383" 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-10T00:45:53.652699" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:53.652310" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.653195" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:53.652900" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:53.653275" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:53.653434" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:53.651937" 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-10T00:45:53.653610" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.654295" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:53.653942" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.654966" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:53.654508" elapsed="0.000486"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.655390" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:53.655143" 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-10T00:45:53.655812" 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-10T00:45:53.656140" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:53.655935" 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-10T00:45:53.656364" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:53.656223" 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-10T00:45:53.656584" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:53.656443" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:53.655916" elapsed="0.000744"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:53.655647" elapsed="0.001036"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:53.655465" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:53.656748" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:53.657103" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:53.657150" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:53.651199" elapsed="0.005976"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.657617" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:53.657695" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:53.657344" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:53.658299" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:53.658020" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:53.657788" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:53.657771" 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-10T00:45:53.658660" 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-10T00:45:53.658831" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:53.658912" 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-10T00:45:53.648693" elapsed="0.010327">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:53.648460" elapsed="0.010629">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:53.648320" elapsed="0.010823">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:53.647924" 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-10T00:45:53.659460" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:53.619424" elapsed="0.040151">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:54.685256" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:45:54.685570" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:54.684590" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:54.684102" elapsed="0.001611"/>
</kw>
<msg time="2026-04-10T00:45:54.685759" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:54.675513" elapsed="0.010289"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:54.674948" elapsed="0.010942"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.686419" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:54.686080" 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-10T00:45:54.691933" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:54.691528" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.692441" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:54.692120" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:54.692517" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:54.692676" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:54.691158" 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-10T00:45:54.692868" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.693523" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:54.693187" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.693974" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:54.693705" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.694474" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:54.694144" 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-10T00:45:54.694914" 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-10T00:45:54.695166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:54.695021" 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-10T00:45:54.695382" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:54.695245" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:54.695595" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:54.695458" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:54.695002" elapsed="0.000666"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:54.694729" elapsed="0.000962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:54.694547" elapsed="0.001170"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:54.695756" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:54.696045" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:54.696093" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:54.690421" elapsed="0.005695"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.696599" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:54.696677" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:54.696324" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:54.697284" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:54.697005" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:54.696770" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:54.696752" 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-10T00:45:54.697603" 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-10T00:45:54.697779" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:54.697859" 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-10T00:45:54.687483" elapsed="0.010486">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:54.687247" elapsed="0.010830">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:54.687106" 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-10T00:45:54.686693" 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-10T00:45:54.698578" elapsed="0.000028"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:54.660565" elapsed="0.038138">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:55.725112" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:45:55.725449" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:55.724431" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:55.723956" elapsed="0.001646"/>
</kw>
<msg time="2026-04-10T00:45:55.725649" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:55.715743" elapsed="0.009950"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:55.715215" elapsed="0.010553"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.726249" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:55.725978" 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-10T00:45:55.731401" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:55.731009" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.731889" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:55.731585" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:55.731966" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:45:55.732130" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:55.730623" 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-10T00:45:55.732306" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.732971" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:55.732620" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.733391" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:55.733152" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.733797" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:55.733561" 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-10T00:45:55.734259" 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-10T00:45:55.734518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:55.734370" 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-10T00:45:55.734738" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:55.734599" 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-10T00:45:55.734971" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:55.734814" elapsed="0.000296"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:55.734350" elapsed="0.000786"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:55.734092" elapsed="0.001069"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:55.733886" elapsed="0.001302"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:55.735229" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:45:55.735432" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:55.735478" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:55.729892" elapsed="0.005609"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.735971" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:55.736049" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:55.735672" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:55.736838" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:55.736356" elapsed="0.000577">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:55.736141" elapsed="0.000862">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:55.736123" 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-10T00:45:55.737189" 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-10T00:45:55.737361" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:55.737426" 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-10T00:45:55.727337" elapsed="0.010198">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:55.727095" elapsed="0.010509">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:55.726946" elapsed="0.010712">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:55.726528" elapsed="0.011219">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:55.737992" elapsed="0.000042"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:55.699933" elapsed="0.038219">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:56.762533" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:45:56.762858" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:56.761877" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:56.761406" elapsed="0.001599"/>
</kw>
<msg time="2026-04-10T00:45:56.763052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:56.753338" elapsed="0.009760"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:56.752919" elapsed="0.010253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.763618" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:56.763362" 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-10T00:45:56.768773" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:56.768373" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.769357" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:56.769058" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:56.769435" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:56.769597" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:56.767989" 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-10T00:45:56.769777" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.770663" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:56.770114" elapsed="0.000578"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.771125" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:56.770870" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.771548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:56.771302" 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-10T00:45:56.772070" 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-10T00:45:56.772335" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:56.772186" 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-10T00:45:56.772554" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:56.772415" 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-10T00:45:56.772768" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:56.772630" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:56.772166" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:56.771806" elapsed="0.001079"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:56.771621" elapsed="0.001289"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:56.772951" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:45:56.773155" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:56.773200" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:56.767229" elapsed="0.005994"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.773715" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:56.773799" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:56.773393" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:56.774401" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:56.774124" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:56.773907" elapsed="0.000631">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:56.773888" 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-10T00:45:56.774718" 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-10T00:45:56.774903" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:56.774969" 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-10T00:45:56.764705" elapsed="0.010372">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:56.764471" elapsed="0.010675">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:56.764330" elapsed="0.010870">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:56.763904" 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-10T00:45:56.775520" elapsed="0.000060"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:56.738965" elapsed="0.036710">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:57.804584" elapsed="0.000382"/>
</kw>
<msg time="2026-04-10T00:45:57.805078" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:57.803673" elapsed="0.001511"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:57.803037" elapsed="0.002329"/>
</kw>
<msg time="2026-04-10T00:45:57.805437" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:57.791735" elapsed="0.013829"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:57.791119" elapsed="0.014554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.806634" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:57.806205" 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-10T00:45:57.812102" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:57.811669" elapsed="0.000463"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.812583" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:57.812291" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:57.812657" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:45:57.812815" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:57.811299" 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-10T00:45:57.813009" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.813654" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:57.813320" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.814099" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:57.813834" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.814507" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:57.814268" 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-10T00:45:57.814934" 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-10T00:45:57.815184" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:57.815040" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:57.815398" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:57.815262" elapsed="0.000188"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:57.815610" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:57.815473" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:57.815021" elapsed="0.000662"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:57.814755" elapsed="0.000951"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:57.814578" elapsed="0.001153"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:57.815770" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:45:57.815984" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:57.816030" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:57.810564" elapsed="0.005489"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.816568" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:57.816644" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:57.816297" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:57.817250" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:57.816965" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:57.816736" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:57.816718" 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-10T00:45:57.817572" 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-10T00:45:57.817742" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:57.817808" 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-10T00:45:57.807739" elapsed="0.010228">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:57.807499" elapsed="0.010539">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:57.807359" elapsed="0.010733">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:57.806960" elapsed="0.011221">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:57.818411" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:57.776573" elapsed="0.041955">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:58.845610" elapsed="0.000274"/>
</kw>
<msg time="2026-04-10T00:45:58.845956" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:58.844915" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:58.844369" elapsed="0.001738"/>
</kw>
<msg time="2026-04-10T00:45:58.846154" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:58.835751" 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-10T00:45:58.835046" elapsed="0.011230"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.846774" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:58.846509" 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-10T00:45:58.852245" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:58.851781" elapsed="0.000494"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.852733" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:58.852439" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:58.852810" elapsed="0.000052"/>
</return>
<msg time="2026-04-10T00:45:58.852996" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:58.851378" 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-10T00:45:58.853250" elapsed="0.000201"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.854006" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:58.853620" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.854437" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:58.854193" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.854869" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:58.854615" 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-10T00:45:58.855345" 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-10T00:45:58.855606" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:58.855460" 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-10T00:45:58.855825" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:58.855686" 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-10T00:45:58.856085" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:58.855942" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:58.855438" elapsed="0.000721"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:58.855147" elapsed="0.001037"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:58.854949" elapsed="0.001261"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:58.856250" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:58.856457" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:58.856506" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:58.850642" elapsed="0.005890"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.856999" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:58.857078" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:58.856700" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:58.857921" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:58.857613" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:58.857372" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:58.857152" elapsed="0.000944">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:58.858251" 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-10T00:45:58.858422" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:58.858488" 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-10T00:45:58.847870" elapsed="0.010727">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:58.847620" elapsed="0.011046">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:58.847478" elapsed="0.011243">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:58.847077" 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-10T00:45:58.859069" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:58.819366" elapsed="0.039827">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:45:59.884663" elapsed="0.000263"/>
</kw>
<msg time="2026-04-10T00:45:59.884995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:59.883892" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:59.883398" elapsed="0.001745"/>
</kw>
<msg time="2026-04-10T00:45:59.885197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:45:59.874955" elapsed="0.010286"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:45:59.874444" elapsed="0.010871"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.885765" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:45:59.885507" 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-10T00:45:59.891170" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:59.890754" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.891642" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:59.891355" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:45:59.891716" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:45:59.891893" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:45:59.890376" 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-10T00:45:59.892069" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.892726" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:45:59.892393" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.893164" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:59.892923" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.893587" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:45:59.893338" 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-10T00:45:59.894473" elapsed="0.000121"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.895323" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:59.894904" elapsed="0.000571"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.895874" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:59.895536" elapsed="0.000460"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.896374" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:45:59.896048" elapsed="0.000440"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:45:59.894795" elapsed="0.001743"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:45:59.893861" elapsed="0.002732"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:59.893661" elapsed="0.002993"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:45:59.896750" elapsed="0.000082"/>
</return>
<msg time="2026-04-10T00:45:59.897313" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:45:59.897417" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:45:59.889579" elapsed="0.007890"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.898633" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:45:59.898810" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:45:59.897873" elapsed="0.001139"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:45:59.900354" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:45:59.899685" elapsed="0.000821">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:45:59.899175" elapsed="0.001477">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:45:59.899132" elapsed="0.001588">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.901087" elapsed="0.000049"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.901470" elapsed="0.000045"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:45:59.901614" elapsed="0.000036"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:45:59.886888" elapsed="0.014995">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:45:59.886636" elapsed="0.015464">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:45:59.886488" elapsed="0.015746">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:45:59.886083" elapsed="0.016357">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:45:59.903015" elapsed="0.000054"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:45:59.860041" elapsed="0.043234">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:00.928985" elapsed="0.000331"/>
</kw>
<msg time="2026-04-10T00:46:00.929403" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:00.928045" elapsed="0.001442"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:00.927268" elapsed="0.002330"/>
</kw>
<msg time="2026-04-10T00:46:00.929661" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:00.918147" elapsed="0.011576"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:00.917706" elapsed="0.012123"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.930486" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:00.930118" 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-10T00:46:00.936239" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:00.935817" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.936724" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:00.936428" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:00.936798" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:00.936976" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:00.935421" elapsed="0.001580"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:00.937151" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.937799" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:00.937465" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.938234" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:00.937996" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.938788" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:00.938473" elapsed="0.000342"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:00.939238" 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-10T00:46:00.939498" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:00.939354" 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-10T00:46:00.939714" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:00.939577" 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-10T00:46:00.939992" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:00.939821" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:00.939334" elapsed="0.000771"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:00.939073" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:00.938889" elapsed="0.001269"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:00.940210" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:46:00.940451" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:00.940500" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:00.934684" elapsed="0.005839"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.942968" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:00.943052" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:00.940699" elapsed="0.002385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:00.943681" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:00.943384" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:00.943161" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:00.943140" 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-10T00:46:00.944027" elapsed="0.000073"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:00.944270" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:00.944338" 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-10T00:46:00.931975" elapsed="0.012471">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:00.931635" elapsed="0.012881">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:00.931445" elapsed="0.013125">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:00.930886" elapsed="0.013772">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:00.944937" elapsed="0.000033"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:00.904280" elapsed="0.040786">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:01.968944" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:46:01.969252" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:01.968287" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:01.967809" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:46:01.969519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:01.959709" elapsed="0.009857"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:01.959299" elapsed="0.010343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.970114" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:01.969829" 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-10T00:46:01.975392" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:01.975007" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.975881" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:01.975577" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:01.975957" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:01.976116" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:01.974624" 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-10T00:46:01.976290" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.976960" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:01.976602" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.977381" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:01.977142" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.977792" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:01.977551" 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-10T00:46:01.978401" 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-10T00:46:01.978669" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:01.978523" 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-10T00:46:01.978911" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:01.978749" 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-10T00:46:01.979127" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:01.978988" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:01.978504" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:01.978064" elapsed="0.001160"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:01.977880" elapsed="0.001369"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:01.979288" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:01.979488" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:01.979534" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:01.973897" elapsed="0.005661"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.980014" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:01.980090" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:01.979726" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:01.980670" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:01.980396" elapsed="0.000344">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:01.980181" elapsed="0.000623">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:01.980163" elapsed="0.000672">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:01.981005" 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-10T00:46:01.981231" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:01.981299" 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-10T00:46:01.971189" elapsed="0.010217">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:01.970960" elapsed="0.010517">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:01.970806" elapsed="0.010727">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:01.970406" elapsed="0.011217">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:01.981869" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:01.945882" elapsed="0.036105">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:03.007750" elapsed="0.000258"/>
</kw>
<msg time="2026-04-10T00:46:03.008075" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:03.007101" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:03.006623" elapsed="0.001592"/>
</kw>
<msg time="2026-04-10T00:46:03.008262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:02.998471" elapsed="0.009837"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:02.997981" elapsed="0.010401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.008884" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:03.008604" 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-10T00:46:03.014088" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:03.013671" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.014624" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:03.014275" elapsed="0.000376"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:03.014716" elapsed="0.000046"/>
</return>
<msg time="2026-04-10T00:46:03.014966" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:03.013298" elapsed="0.001703"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:03.015228" elapsed="0.000234"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.016265" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:03.015705" elapsed="0.000599"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.016931" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:03.016548" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.017548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:03.017210" elapsed="0.000375"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:03.018160" 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-10T00:46:03.018605" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:03.018308" 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-10T00:46:03.018979" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:03.018749" elapsed="0.000310"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:03.019293" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:03.019092" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:03.018281" elapsed="0.001117"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:03.017929" elapsed="0.001504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:03.017651" elapsed="0.001817"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:03.019531" elapsed="0.000050"/>
</return>
<msg time="2026-04-10T00:46:03.019831" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:03.019921" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:03.012504" elapsed="0.007451"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.020661" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:03.020756" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:03.020197" elapsed="0.000583"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:03.021578" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:03.021094" elapsed="0.000558">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:03.020870" elapsed="0.000850">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:03.020834" 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-10T00:46:03.021921" 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-10T00:46:03.022096" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:03.022164" 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-10T00:46:03.009937" elapsed="0.012335">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:03.009691" elapsed="0.012650">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:03.009552" elapsed="0.012844">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:03.009157" elapsed="0.013330">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:03.022723" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:02.982894" elapsed="0.039947">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:04.048931" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:46:04.049238" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:04.048272" elapsed="0.001028"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:04.047785" elapsed="0.001593"/>
</kw>
<msg time="2026-04-10T00:46:04.049423" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:04.039639" elapsed="0.009828"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:04.039224" elapsed="0.010316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.050084" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:04.049729" 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-10T00:46:04.055161" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:04.054752" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.055638" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:04.055348" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:04.055714" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:04.055887" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:04.054365" 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-10T00:46:04.056065" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.056726" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:04.056385" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.057378" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:04.056923" elapsed="0.000483"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.057807" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:04.057561" 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-10T00:46:04.058254" 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-10T00:46:04.058507" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:04.058362" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:04.058881" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:04.058586" elapsed="0.000353"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:04.059106" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:04.058963" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:04.058343" elapsed="0.000836"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:04.058079" elapsed="0.001123"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:04.057897" elapsed="0.001331"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:04.059268" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:04.059468" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:04.059513" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:04.053639" elapsed="0.005898"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.059990" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:04.060067" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:04.059705" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:04.060661" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:04.060380" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:04.060159" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:04.060141" 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-10T00:46:04.060998" 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-10T00:46:04.061167" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:04.061232" 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-10T00:46:04.051155" elapsed="0.010183">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:04.050923" elapsed="0.010523">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:04.050767" elapsed="0.010735">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:04.050354" 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-10T00:46:04.061826" elapsed="0.000038"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:04.023761" elapsed="0.038197">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:05.088453" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:46:05.088764" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:05.087763" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:05.087304" elapsed="0.001621"/>
</kw>
<msg time="2026-04-10T00:46:05.088981" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:05.078196" elapsed="0.010830"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:05.077523" elapsed="0.011577"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.089546" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:05.089290" 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-10T00:46:05.094979" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:05.094561" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.095454" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:05.095166" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:05.095529" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:05.095690" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:05.094190" 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-10T00:46:05.095882" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.096536" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:05.096201" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.096992" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:05.096718" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.097410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:05.097166" 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-10T00:46:05.097833" 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-10T00:46:05.098103" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:05.097958" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:05.098320" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:05.098183" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:05.098534" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:05.098396" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:05.097938" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:05.097667" elapsed="0.001030"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:05.097484" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:05.098764" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:05.098986" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:05.099037" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:05.093460" elapsed="0.005601"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.099503" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:05.099579" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:05.099232" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:05.100185" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:05.099903" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:05.099671" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:05.099653" 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-10T00:46:05.100508" 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-10T00:46:05.100678" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:05.100744" 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-10T00:46:05.090619" elapsed="0.010245">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:05.090381" elapsed="0.010555">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:05.090238" 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-10T00:46:05.089825" elapsed="0.011275">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:05.101330" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:05.062769" elapsed="0.038676">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:06.128511" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:46:06.128833" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:06.127790" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:06.127241" elapsed="0.001762"/>
</kw>
<msg time="2026-04-10T00:46:06.129052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:06.118345" 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-10T00:46:06.117629" elapsed="0.011548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.129647" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:06.129383" 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-10T00:46:06.134909" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:06.134476" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.135517" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:06.135185" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:06.135598" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:46:06.135766" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:06.134098" 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-10T00:46:06.135964" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.136641" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:06.136290" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.137106" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:06.136831" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.137530" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:06.137282" 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-10T00:46:06.137974" 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-10T00:46:06.138242" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:06.138087" 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-10T00:46:06.138466" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:06.138325" 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-10T00:46:06.138693" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:06.138544" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:06.138067" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:06.137789" elapsed="0.001012"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:06.137603" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:06.138885" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:06.139093" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:06.139140" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:06.133350" elapsed="0.005813"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.139639" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:06.139720" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:06.139351" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:06.140553" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:06.140254" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:06.139816" elapsed="0.000880">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:06.139797" elapsed="0.000931">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:06.140898" 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-10T00:46:06.141074" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:06.141140" 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-10T00:46:06.130751" elapsed="0.010498">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:06.130506" elapsed="0.010813">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:06.130360" elapsed="0.011016">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:06.129950" elapsed="0.011517">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:06.141706" elapsed="0.000064"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:06.102251" elapsed="0.039636">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:07.166276" elapsed="0.000263"/>
</kw>
<msg time="2026-04-10T00:46:07.166611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:07.165568" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:07.165096" elapsed="0.001665"/>
</kw>
<msg time="2026-04-10T00:46:07.166809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:07.156693" elapsed="0.010177"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:07.156138" elapsed="0.010811"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.167419" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:07.167151" 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-10T00:46:07.172802" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:07.172399" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.173297" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:07.173007" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:07.173376" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:07.173538" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:07.172027" 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-10T00:46:07.173744" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.174422" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:07.174080" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.174878" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:07.174615" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.175299" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:07.175053" 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-10T00:46:07.175734" 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-10T00:46:07.176020" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:07.175870" 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-10T00:46:07.176241" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:07.176103" 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-10T00:46:07.176470" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:07.176318" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:07.175827" elapsed="0.000719"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:07.175559" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:07.175374" elapsed="0.001225"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:07.176648" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:07.176867" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:07.176916" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:07.171284" elapsed="0.005656"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.177451" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:07.177527" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:07.177178" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:07.178193" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:07.177905" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:07.177625" elapsed="0.000713">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:07.177603" 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-10T00:46:07.178522" 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-10T00:46:07.178713" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:07.178784" 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-10T00:46:07.168544" elapsed="0.010368">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:07.168278" elapsed="0.010707">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:07.168129" elapsed="0.010912">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:07.167707" 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-10T00:46:07.179363" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:07.142688" elapsed="0.036792">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:08.204808" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:46:08.205129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:08.204164" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:08.203677" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:46:08.205312" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:08.195113" elapsed="0.010242"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:08.194530" elapsed="0.010898"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.205893" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:08.205616" 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-10T00:46:08.211075" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:08.210654" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.211574" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:08.211264" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:08.211652" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:08.211815" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:08.210268" 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-10T00:46:08.212095" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.212796" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:08.212438" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.213251" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:08.213003" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.213689" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:08.213437" 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-10T00:46:08.214138" 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-10T00:46:08.214401" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:08.214252" 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-10T00:46:08.214636" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:08.214492" 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-10T00:46:08.214883" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:08.214724" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:08.214231" elapsed="0.000734"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:08.213966" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:08.213764" elapsed="0.001253"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:08.215059" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:08.215265" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:08.215314" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:08.209525" elapsed="0.005814"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.215994" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:08.216091" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:08.215520" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:08.216716" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:08.216411" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:08.216192" elapsed="0.000683">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:08.216172" 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-10T00:46:08.217064" 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-10T00:46:08.217238" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:08.217305" 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-10T00:46:08.206936" elapsed="0.010480">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:08.206692" elapsed="0.010803">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:08.206554" 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-10T00:46:08.206164" 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-10T00:46:08.217905" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:08.180371" elapsed="0.037659">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:09.245391" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:46:09.245708" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:09.244618" elapsed="0.001154"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:09.244163" elapsed="0.001703"/>
</kw>
<msg time="2026-04-10T00:46:09.245914" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:09.234860" elapsed="0.011098"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:09.234243" elapsed="0.011789"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.246479" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:09.246220" 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-10T00:46:09.251799" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:09.251413" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.252288" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:09.252000" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:09.252362" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:09.252527" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:09.251046" elapsed="0.001506"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:09.252702" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.253373" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:09.253033" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.253798" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:09.253556" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.254227" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:09.253986" 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-10T00:46:09.254698" 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-10T00:46:09.254970" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:09.254808" 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-10T00:46:09.255191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:09.255050" 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-10T00:46:09.255415" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:09.255268" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:09.254788" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:09.254522" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:09.254308" elapsed="0.001231"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:09.255579" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:09.255780" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:09.255827" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:09.250280" elapsed="0.005585"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.256309" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:09.256385" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:09.256036" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:09.257028" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:09.256733" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:09.256516" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:09.256498" 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-10T00:46:09.257346" 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-10T00:46:09.257518" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:09.257584" 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-10T00:46:09.247621" elapsed="0.010070">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:09.247387" elapsed="0.010374">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:09.247244" elapsed="0.010572">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:09.246784" elapsed="0.011144">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:09.258161" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:09.218962" elapsed="0.039314">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:10.285030" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:46:10.285332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:10.284355" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:10.283898" elapsed="0.001574"/>
</kw>
<msg time="2026-04-10T00:46:10.285516" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:10.275754" elapsed="0.009805"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:10.275343" elapsed="0.010289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.286093" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:10.285816" 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-10T00:46:10.291189" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:10.290786" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.291662" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:10.291374" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:10.291736" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:10.291909" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:10.290420" 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-10T00:46:10.292085" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.292732" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:10.292398" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.293202" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:10.292930" elapsed="0.000298"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.293676" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:10.293438" 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-10T00:46:10.294111" 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-10T00:46:10.294359" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:10.294217" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:10.294578" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:10.294439" 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-10T00:46:10.294793" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:10.294655" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:10.294198" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:10.293945" elapsed="0.000962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:10.293749" elapsed="0.001183"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:10.294973" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:10.295171" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:10.295218" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:10.289699" elapsed="0.005543"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.295674" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:10.295751" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:10.295408" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:10.296530" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:10.296073" elapsed="0.000528">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:10.295857" elapsed="0.000809">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:10.295825" 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-10T00:46:10.296863" 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-10T00:46:10.297063" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:10.297132" 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-10T00:46:10.287179" elapsed="0.010060">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:10.286945" elapsed="0.010364">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:10.286789" elapsed="0.010573">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:10.286375" elapsed="0.011076">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:10.297680" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:10.259118" elapsed="0.038676">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:11.324439" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:46:11.324742" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:11.323727" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:11.323154" elapsed="0.001750"/>
</kw>
<msg time="2026-04-10T00:46:11.325038" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:11.315059" elapsed="0.010026"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:11.314535" elapsed="0.010624"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.325616" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:11.325354" 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-10T00:46:11.331048" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:11.330607" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.331555" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:11.331241" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:11.331630" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:46:11.331795" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:11.330191" elapsed="0.001630"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:11.331999" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.332666" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:11.332323" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.333340" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:11.332864" elapsed="0.000503"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.333763" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:11.333517" 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-10T00:46:11.334235" 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-10T00:46:11.334491" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:11.334345" 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-10T00:46:11.334707" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:11.334570" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:11.334947" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:11.334783" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:11.334326" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:11.334054" elapsed="0.000993"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:11.333857" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:11.335115" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:46:11.335323" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:11.335370" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:11.329417" elapsed="0.005978"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.335918" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:11.335998" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:11.335600" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:11.336608" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:11.336313" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:11.336092" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:11.336074" 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-10T00:46:11.336942" 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-10T00:46:11.337176" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:11.337244" 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-10T00:46:11.326732" elapsed="0.010621">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:11.326497" elapsed="0.010926">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:11.326321" elapsed="0.011160">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:11.325914" elapsed="0.011656">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:11.337808" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:11.298489" elapsed="0.039453">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.365276" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:46:12.365583" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.364614" elapsed="0.001032"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:12.364155" elapsed="0.001569"/>
</kw>
<msg time="2026-04-10T00:46:12.365770" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.354606" elapsed="0.011207"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:12.354020" elapsed="0.011882"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.366374" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.366105" 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-10T00:46:12.371732" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.371337" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.372237" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.371936" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.372312" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:12.372472" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.370963" 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-10T00:46:12.372653" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.373328" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.372988" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.373755" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.373512" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.374203" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.373943" 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-10T00:46:12.374626" 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-10T00:46:12.374966" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.374732" 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-10T00:46:12.375186" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.375048" 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-10T00:46:12.375402" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.375263" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.374712" elapsed="0.000764"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.374460" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.374276" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:12.375562" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:12.375764" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:12.375811" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:12.370216" elapsed="0.005620"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.376294" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.376371" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.376023" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.376973" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.376679" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:12.376464" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:12.376446" 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-10T00:46:12.377291" 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-10T00:46:12.377464" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.377530" 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-10T00:46:12.367456" elapsed="0.010183">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:12.367222" elapsed="0.010488">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:12.367083" elapsed="0.010683">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.366641" elapsed="0.011232">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.378119" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.338823" elapsed="0.039420">No leader found.</status>
</kw>
<msg time="2026-04-10T00:46:12.378330" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.820511" elapsed="90.557914">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.817096" elapsed="90.561432">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:44:41.804906" elapsed="90.573785">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s1-s1-t29" name="Check Entity Owner Status After Recover" line="143">
<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-10T00:46:12.381949" elapsed="0.000250"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.381670" 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-10T00:46:12.383243" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.383133" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.383114" elapsed="0.000234"/>
</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-10T00:46:12.387939" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.387816" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.387797" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.388997" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.388597" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.389465" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.389180" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.389535" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.389687" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.388227" elapsed="0.001485"/>
</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-10T00:46:12.390096" 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-10T00:46:12.390338" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.390195" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.390178" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.389929" elapsed="0.000508"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.389765" 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-10T00:46:12.387458" 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-10T00:46:12.382827" elapsed="0.007740"/>
</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-10T00:46:12.382405" elapsed="0.008206"/>
</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-10T00:46:12.379456" elapsed="0.011207"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:12.401769" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.398121" elapsed="0.003687">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.402047" elapsed="0.000023"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.378940" elapsed="0.023259">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t30" name="Create Bridge Manually and Verify After Recover" line="150">
<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-10T00:46:12.405406" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.405145" elapsed="0.000524"/>
</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-10T00:46:12.406680" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.406569" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.406551" 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-10T00:46:12.411292" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.411186" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.411168" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.412437" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.412060" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.412925" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.412623" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.412997" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.413151" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.411576" elapsed="0.001602"/>
</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-10T00:46:12.413566" 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-10T00:46:12.413806" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.413663" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.413646" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.413427" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.413273" elapsed="0.000672"/>
</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-10T00:46:12.410820" elapsed="0.003189"/>
</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-10T00:46:12.406284" elapsed="0.007782"/>
</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-10T00:46:12.405816" elapsed="0.008295"/>
</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-10T00:46:12.402946" elapsed="0.011218"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.421978" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.421678" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.421660" elapsed="0.000401"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.422387" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:12.422493" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.422211" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.423062" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.422668" elapsed="0.000441"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.423635" level="INFO">${conn_id} = 15</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.423265" elapsed="0.000397"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.424709" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.424787" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.424440" elapsed="0.000371"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.424986" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.426186" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:12.426509" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.425835" elapsed="0.001175">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.427068" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.425481" elapsed="0.001638"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.423891" elapsed="0.003332">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.427396" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.427569" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.427758" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.427906" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.427862" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.427828" elapsed="0.000143"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.428096" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.428024" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.428008" elapsed="0.000154"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.428194" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.430800" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.431296" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.431591" elapsed="0.000106"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:12.428514" elapsed="0.003238"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.421156" elapsed="0.010670">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.431906" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.420584" elapsed="0.011370"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.420093" elapsed="0.011960">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.432245" elapsed="0.000023"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.432438" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.432631" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.432858" elapsed="0.000023"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.418045" elapsed="0.014937">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.402390" elapsed="0.030720">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t31" name="Add Port Manually and Verify After Recover" line="154">
<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-10T00:46:12.436123" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.435839" 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-10T00:46:12.437354" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.437245" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.437227" 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-10T00:46:12.442180" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.442072" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.442049" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.443232" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.442838" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.443700" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.443415" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.443770" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.443949" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.442467" elapsed="0.001508"/>
</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-10T00:46:12.444319" 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-10T00:46:12.444599" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.444454" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.444435" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.444180" elapsed="0.000518"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.444028" elapsed="0.000694"/>
</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-10T00:46:12.441669" 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-10T00:46:12.436962" elapsed="0.007867"/>
</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-10T00:46:12.436530" elapsed="0.008360"/>
</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-10T00:46:12.433829" elapsed="0.011114"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.452732" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.452464" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.452446" elapsed="0.000365"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.453115" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:12.453217" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.452984" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.453770" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.453391" elapsed="0.000424"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.454372" level="INFO">${conn_id} = 17</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.454010" elapsed="0.000388"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.455274" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.455350" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.455007" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.455529" elapsed="0.000326"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.456682" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:12.456930" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.456373" elapsed="0.000982">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.457412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.456021" elapsed="0.001439"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.454606" elapsed="0.002959">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.457735" elapsed="0.000198"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.458095" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.458276" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.458402" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.458362" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.458344" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.458552" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.458515" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.458501" elapsed="0.000109"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.458640" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.461393" elapsed="0.000306"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.461874" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.462174" elapsed="0.000095"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:12.459005" elapsed="0.003316"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.451937" elapsed="0.010459">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.462450" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.451379" elapsed="0.011116"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.450881" elapsed="0.011709">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.462772" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.462977" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.463176" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.463374" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.448825" elapsed="0.014664">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.433303" elapsed="0.030310">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t32" name="Create Tap Device After Recover" line="158">
<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-10T00:46:12.466570" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.466307" 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-10T00:46:12.467889" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.467753" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.467732" 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-10T00:46:12.472565" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.472451" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.472434" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.473681" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.473297" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.474177" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.473891" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.474248" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.474407" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.472916" 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-10T00:46:12.474768" 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-10T00:46:12.475032" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.474885" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.474867" elapsed="0.000281"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.474630" elapsed="0.000543"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.474483" elapsed="0.000719"/>
</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-10T00:46:12.472093" 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-10T00:46:12.467456" elapsed="0.007866"/>
</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-10T00:46:12.467000" elapsed="0.008367"/>
</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-10T00:46:12.464282" elapsed="0.011137"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.478054" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.477751" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.477732" elapsed="0.000404"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.478414" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:12.478514" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.478279" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.479093" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.478696" elapsed="0.000443"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.479648" level="INFO">${conn_id} = 19</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.479292" elapsed="0.000382"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.480668" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.480756" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.480311" elapsed="0.000470"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.480998" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.482591" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:12.482909" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.482143" elapsed="0.001181">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.483380" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.481626" elapsed="0.001802"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.479900" elapsed="0.003627">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.483692" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.483876" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.484173" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.484347" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.484306" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.484283" elapsed="0.000127"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.484495" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.484460" elapsed="0.000074"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.484446" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.484584" elapsed="0.000012"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.487375" elapsed="0.000304"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.487896" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.488198" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:12.484913" elapsed="0.003435"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.477226" elapsed="0.011196">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.488477" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.476499" elapsed="0.012024"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.476005" elapsed="0.012613">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.488819" elapsed="0.000038"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.489051" elapsed="0.000032"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.489264" elapsed="0.000022"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.475630" elapsed="0.013741">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:46:12.463803" elapsed="0.025691">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t33" name="Add Tap Device Manually and Verify After Recover" line="162">
<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-10T00:46:12.492713" elapsed="0.000295"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.492457" elapsed="0.000606"/>
</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-10T00:46:12.494070" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.493961" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.493943" 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-10T00:46:12.498709" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.498603" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.498586" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.499757" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.499376" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.500240" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.499956" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.500311" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.500468" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.499009" elapsed="0.001486"/>
</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-10T00:46:12.500835" 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-10T00:46:12.501100" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.500955" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.500933" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.500693" elapsed="0.000507"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.500546" elapsed="0.000681"/>
</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-10T00:46:12.498248" elapsed="0.003029"/>
</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-10T00:46:12.493652" elapsed="0.007679"/>
</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-10T00:46:12.493210" elapsed="0.008203"/>
</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-10T00:46:12.490290" elapsed="0.011179"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.509227" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.508960" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.508941" elapsed="0.000366"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.509577" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:12.509677" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.509450" elapsed="0.000253"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.510281" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.509885" elapsed="0.000443"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.510998" level="INFO">${conn_id} = 21</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.510482" elapsed="0.000543"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.511907" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.511985" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.511630" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.512165" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.513316" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:12.513538" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.513007" elapsed="0.001111">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.514180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.512642" elapsed="0.001590"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.511242" elapsed="0.003092">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.514512" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.514682" elapsed="0.000019"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.514867" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.514991" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.514952" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.514934" elapsed="0.000118"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.515135" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.515101" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.515087" elapsed="0.000106"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.515222" elapsed="0.000012"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.517739" elapsed="0.000340"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.518237" elapsed="0.000142"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.518522" elapsed="0.000093"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:12.515523" elapsed="0.003143"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.508414" elapsed="0.010324">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.518826" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.507873" elapsed="0.011016"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.507367" elapsed="0.011618">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.519170" elapsed="0.000021"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.519362" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.519555" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.519752" elapsed="0.000019"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.505324" elapsed="0.014557">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.489685" elapsed="0.030323">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t34" name="Delete the Bridge Manually and Verify After Recover" 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-10T00:46:12.523074" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.522790" 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-10T00:46:12.524333" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.524217" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.524199" 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-10T00:46:12.530658" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.530549" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.530531" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.531709" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.531331" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.532197" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.531911" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.532268" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:12.532420" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.530960" elapsed="0.001484"/>
</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-10T00:46:12.532780" 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-10T00:46:12.533032" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.532890" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.532872" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.532642" elapsed="0.000488"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.532495" elapsed="0.000659"/>
</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-10T00:46:12.530187" 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-10T00:46:12.523927" elapsed="0.009330"/>
</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-10T00:46:12.523482" elapsed="0.009819"/>
</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-10T00:46:12.520749" elapsed="0.012601"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.541128" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.540863" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.540831" elapsed="0.000377"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.541479" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:12.541579" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.541351" elapsed="0.000254"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.542169" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:12.541752" elapsed="0.000466"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.542724" level="INFO">${conn_id} = 23</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.542372" elapsed="0.000378"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.543621" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:12.543697" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:12.543361" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.543889" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:12.545037" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:12.545268" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.544712" elapsed="0.000970">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.545736" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.544365" elapsed="0.001447"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.542973" elapsed="0.002967">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.546108" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.546276" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.546446" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.546568" elapsed="0.000162"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.546529" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.546512" elapsed="0.000271"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.546888" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.546835" elapsed="0.000093"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.546820" elapsed="0.000129"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.546979" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:12.549479" elapsed="0.000321"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.549974" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:12.550262" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:12.547288" elapsed="0.003122"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.540330" elapsed="0.010153">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:12.550537" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.539776" elapsed="0.010805"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.539289" elapsed="0.011422">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.550909" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:12.551102" elapsed="0.000020"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.537229" elapsed="0.013988">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.520202" elapsed="0.031141">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s1-t35" name="Verify Modified Port After Recover" 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-10T00:46:12.554270" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:12.554016" elapsed="0.000514"/>
</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-10T00:46:12.555507" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.555398" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.555379" 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-10T00:46:12.560156" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:12.560050" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:12.560032" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.561326" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:12.560805" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.561813" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:12.561510" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:12.561919" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:12.562077" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:12.560441" elapsed="0.001660"/>
</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-10T00:46:12.562439" 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-10T00:46:12.562675" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:12.562535" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:12.562518" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:12.562301" elapsed="0.000472"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:12.562154" elapsed="0.000642"/>
</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-10T00:46:12.559677" elapsed="0.003185"/>
</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-10T00:46:12.555105" elapsed="0.007813"/>
</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-10T00:46:12.554677" elapsed="0.008285"/>
</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-10T00:46:12.552020" elapsed="0.010993"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:46:12.569452" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:46:12.569099" elapsed="0.000381"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:12.581595" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.577821" elapsed="0.003812">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:13.602316" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:13.596727" elapsed="0.005657">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:14.619783" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:14.615781" elapsed="0.004056">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:15.639856" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:15.635972" elapsed="0.003937">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:16.657490" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:16.653678" elapsed="0.003863">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:17.676395" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.671400" elapsed="0.005047">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:46:17.676560" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:46:12.569671" elapsed="5.107035">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.567147" elapsed="5.109685">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:12.551536" elapsed="5.125468">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t36" name="Delete Port In New Owner After Recover" line="174">
<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-10T00:46:17.680097" elapsed="0.000266"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.679805" elapsed="0.000614"/>
</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-10T00:46:17.681481" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.681344" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.681319" elapsed="0.000238"/>
</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-10T00:46:17.686098" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.685990" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.685972" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.687307" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.686804" elapsed="0.000531"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.687783" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.687495" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.687868" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:46:17.688027" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.686429" 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-10T00:46:17.688408" 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-10T00:46:17.688741" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.688593" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.688575" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.688267" elapsed="0.000588"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.688110" elapsed="0.000772"/>
</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-10T00:46:17.685619" elapsed="0.003317"/>
</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-10T00:46:17.681047" elapsed="0.007945"/>
</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-10T00:46:17.680575" elapsed="0.008461"/>
</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-10T00:46:17.677785" elapsed="0.011304"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:17.700297" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.696676" elapsed="0.003661">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.677238" elapsed="0.023239">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t37" name="Delete Bridge In New Owner And Verify After Recover" line="178">
<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-10T00:46:17.703704" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.703443" elapsed="0.000544"/>
</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-10T00:46:17.704964" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.704838" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.704819" 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-10T00:46:17.709638" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.709530" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.709512" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.710723" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.710342" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.711266" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.710932" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.711338" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:17.711496" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.709951" elapsed="0.001569"/>
</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-10T00:46:17.711960" 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-10T00:46:17.712203" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.712059" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.712042" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.711748" elapsed="0.000553"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.711572" elapsed="0.000752"/>
</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-10T00:46:17.709175" elapsed="0.003200"/>
</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-10T00:46:17.704555" elapsed="0.007874"/>
</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-10T00:46:17.704138" elapsed="0.008335"/>
</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-10T00:46:17.701227" elapsed="0.011296"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:17.723815" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.720185" elapsed="0.003682">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.700668" elapsed="0.023335">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t38" name="Create Bridge In Old Owner and Verify After Recover" line="182">
<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-10T00:46:17.726960" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.726689" 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-10T00:46:17.728237" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.728124" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.728104" 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-10T00:46:17.733183" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.733075" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.733057" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.734245" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.733862" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.734717" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.734431" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.734788" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:17.734957" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.733476" 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-10T00:46:17.735356" 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-10T00:46:17.735594" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.735452" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.735436" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.735216" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.735067" 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-10T00:46:17.732704" elapsed="0.003062"/>
</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-10T00:46:17.727810" elapsed="0.008011"/>
</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-10T00:46:17.727389" elapsed="0.008492"/>
</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-10T00:46:17.724723" elapsed="0.011211"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:17.747427" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.743604" elapsed="0.003862">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.724190" elapsed="0.023408">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t39" name="Create Port In Old Owner and Verify After Recover" line="186">
<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-10T00:46:17.750695" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.750438" 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-10T00:46:17.751961" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.751830" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.751812" 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-10T00:46:17.756649" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.756542" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.756523" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.757721" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.757329" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.758418" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.757976" elapsed="0.000469"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.758491" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:46:17.758650" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.756949" elapsed="0.001726"/>
</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-10T00:46:17.759063" 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-10T00:46:17.759308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.759163" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.759146" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.758893" elapsed="0.000514"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.758727" 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-10T00:46:17.756190" elapsed="0.003293"/>
</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-10T00:46:17.751550" elapsed="0.007987"/>
</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-10T00:46:17.751136" elapsed="0.008444"/>
</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-10T00:46:17.748329" elapsed="0.011333"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:17.771379" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.767585" elapsed="0.003832">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.747786" elapsed="0.023827">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t40" name="Modify the destination IP of Port In Old Owner After Recover" line="190">
<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-10T00:46:17.774668" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.774411" 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-10T00:46:17.775957" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.775816" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.775792" elapsed="0.000234"/>
</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-10T00:46:17.780688" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.780581" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.780563" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.781736" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.781359" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.782224" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.781935" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.782295" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:17.782447" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.780990" elapsed="0.001481"/>
</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-10T00:46:17.782808" 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-10T00:46:17.783093" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.782945" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.782902" elapsed="0.000301"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.782668" elapsed="0.000564"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.782522" 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-10T00:46:17.780197" 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-10T00:46:17.775527" elapsed="0.007837"/>
</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-10T00:46:17.775114" elapsed="0.008294"/>
</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-10T00:46:17.772432" elapsed="0.011031"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:17.791417" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.787601" elapsed="0.003853">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.771803" elapsed="0.019783">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t41" name="Verify Port Is Modified After Recover" 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-10T00:46:17.794725" elapsed="0.000248"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:17.794465" 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-10T00:46:17.795998" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.795889" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.795869" 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-10T00:46:17.800631" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:17.800524" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:17.800506" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.801686" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:17.801306" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.802175" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:17.801887" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:17.802246" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:17.802399" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:17.800934" 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-10T00:46:17.802762" 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-10T00:46:17.803036" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:17.802875" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:17.802855" elapsed="0.000258"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:17.802623" elapsed="0.000514"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:17.802476" 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-10T00:46:17.800165" 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-10T00:46:17.795589" elapsed="0.007677"/>
</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-10T00:46:17.795177" elapsed="0.008133"/>
</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-10T00:46:17.792258" elapsed="0.011101"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:46:17.809553" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:46:17.809203" elapsed="0.000377"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:17.821799" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.817998" elapsed="0.003840">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:18.840975" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:18.836153" elapsed="0.004877">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:19.862145" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:19.856592" elapsed="0.005607">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:20.879923" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:20.875778" elapsed="0.004200">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:21.898397" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:21.894529" elapsed="0.003925">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:22.916660" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.912840" elapsed="0.003871">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:46:22.916825" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:46:17.809770" elapsed="5.107246">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.807225" elapsed="5.109928">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:17.791775" elapsed="5.125529">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s1-t42" name="Delete Port In Old Owner After Recover" line="198">
<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-10T00:46:22.920412" elapsed="0.000267"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:22.920130" 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-10T00:46:22.921881" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.921727" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.921703" elapsed="0.000254"/>
</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-10T00:46:22.926919" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.926792" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.926773" elapsed="0.000224"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.928062" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:22.927640" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.928572" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:22.928266" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:22.928648" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:22.928808" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:22.927257" 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-10T00:46:22.929326" 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-10T00:46:22.929579" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:22.929429" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:22.929411" elapsed="0.000247"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:22.929169" elapsed="0.000513"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.928995" elapsed="0.000714"/>
</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-10T00:46:22.926424" elapsed="0.003341"/>
</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-10T00:46:22.921421" elapsed="0.008401"/>
</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-10T00:46:22.920947" elapsed="0.008940"/>
</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-10T00:46:22.918093" elapsed="0.011848"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:22.941358" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.937612" elapsed="0.003794">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.917532" elapsed="0.024011">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t43" name="Delete Bridge In Old Owner And Verify After Recover" line="202">
<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-10T00:46:22.944614" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:22.944353" elapsed="0.000576"/>
</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-10T00:46:22.945933" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.945803" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.945784" 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-10T00:46:22.950617" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.950506" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.950487" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.951727" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:22.951335" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.952228" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:22.951934" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:22.952301" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:22.952456" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:22.950951" elapsed="0.001530"/>
</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-10T00:46:22.952884" 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-10T00:46:22.953131" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:22.952985" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:22.952968" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:22.952707" elapsed="0.000524"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.952534" elapsed="0.000723"/>
</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-10T00:46:22.950127" elapsed="0.003184"/>
</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-10T00:46:22.945516" elapsed="0.007863"/>
</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-10T00:46:22.945089" elapsed="0.008342"/>
</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-10T00:46:22.942356" elapsed="0.011169"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:22.965543" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.961752" elapsed="0.003832">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.941753" elapsed="0.023966">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s1-t44" name="Cleans Up Test Environment For Next Suite" line="206">
<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-10T00:46:22.968662" elapsed="0.000254"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:22.968405" elapsed="0.000566"/>
</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-10T00:46:22.969942" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.969817" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.969799" 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-10T00:46:22.974537" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.974430" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.974412" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.975587" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:22.975206" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.976097" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:22.975773" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:22.976169" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:22.976325" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:22.974822" elapsed="0.001527"/>
</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-10T00:46:22.976698" 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-10T00:46:22.977067" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:22.976881" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:22.976780" elapsed="0.000368"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:22.976551" elapsed="0.000621"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.976402" elapsed="0.000794"/>
</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-10T00:46:22.974075" elapsed="0.003175"/>
</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-10T00:46:22.969536" elapsed="0.007769"/>
</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-10T00:46:22.969120" elapsed="0.008229"/>
</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-10T00:46:22.966430" elapsed="0.010971"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.982531" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:22.982245" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:22.982225" elapsed="0.000390"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:22.982964" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:22.983072" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:22.982771" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.983639" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:22.983253" elapsed="0.000434"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:22.984294" level="INFO">${conn_id} = 25</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:22.983907" elapsed="0.000414"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:22.985276" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:22.985355" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:22.984979" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:22.985550" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:22.986787" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:22.987180" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.986465" elapsed="0.001189">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:22.987712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.986093" elapsed="0.001670"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.984537" elapsed="0.003348">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.988067" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.988238" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.988411" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.988532" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.988493" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:22.988476" elapsed="0.000118"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.988677" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:22.988643" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:22.988629" elapsed="0.000107"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:22.988765" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:22.992653" elapsed="0.000376"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:22.993196" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:22.993505" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:22.989103" elapsed="0.004557"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.981688" elapsed="0.012049">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:22.993792" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.981130" elapsed="0.012709"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.980570" elapsed="0.013388">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.994138" elapsed="0.000025"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:46:22.980220" elapsed="0.014031">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.994443" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.994649" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.994870" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.995120" elapsed="0.000024"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.979812" elapsed="0.015422">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.995420" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:22.995629" elapsed="0.000022"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.977613" elapsed="0.018135">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="FAIL" start="2026-04-10T00:46:22.965922" elapsed="0.029970">OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-10T00:46:22.996643" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-10T00:46:22.996561" elapsed="0.000136"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Owner failover and recover</doc>
<status status="FAIL" start="2026-04-10T00:44:35.363479" elapsed="107.633253"/>
</suite>
<suite id="s1-s1-s2" name="Southbound Cluster Extension" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster/020__Southbound_Cluster_Extension.robot">
<kw name="Suite Setup" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.111602" 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-10T00:46:23.107484" elapsed="0.004177"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-10T00:46:23.107249" elapsed="0.004487"/>
</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-10T00:46:23.116541" 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-10T00:46:23.112904" elapsed="0.003667"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-10T00:46:23.116798" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.116671" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.116632" elapsed="0.000257"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.117422" 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-10T00:46:23.117044" elapsed="0.000430"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.117973" 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-10T00:46:23.117638" elapsed="0.000363"/>
</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-10T00:46:23.118523" elapsed="0.000292"/>
</kw>
<msg time="2026-04-10T00:46:23.118951" level="INFO">${status} = PASS</msg>
<msg time="2026-04-10T00:46:23.118999" 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-10T00:46:23.118167" elapsed="0.000854"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.119665" 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-10T00:46:23.119206" elapsed="0.000486"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.120812" 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-10T00:46:23.120516" elapsed="0.000341"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.121273" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.121011" elapsed="0.000294"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.121833" 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-10T00:46:23.121504" elapsed="0.000378"/>
</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-10T00:46:23.124238" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.124045" elapsed="0.000268"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.121943" elapsed="0.002404"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.125262" 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-10T00:46:23.124770" elapsed="0.000542"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.125939" 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-10T00:46:23.125509" elapsed="0.000473"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.126592" 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-10T00:46:23.126212" elapsed="0.000422"/>
</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-10T00:46:23.119964" elapsed="0.006728"/>
</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-10T00:46:23.112510" elapsed="0.014237"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.126940" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.126811" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.126793" elapsed="0.000214"/>
</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-10T00:46:23.130093" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.129697" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.130618" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.130325" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.130690" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:46:23.130870" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.129378" elapsed="0.001518"/>
</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-10T00:46:23.131229" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.131057" elapsed="0.000232"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.130948" elapsed="0.000366"/>
</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-10T00:46:23.127223" elapsed="0.004143"/>
</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-10T00:46:23.131518" elapsed="0.000206"/>
</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-10T00:46:23.132037" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.131905" elapsed="0.000196"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.131774" elapsed="0.000352"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-10T00:46:23.112053" elapsed="0.020125"/>
</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-10T00:46:23.134653" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.134544" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.134525" 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-10T00:46:23.140942" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.140773" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.140748" elapsed="0.000288"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.142212" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.141779" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.142685" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.142399" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.142756" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.142924" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.141343" elapsed="0.001606"/>
</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-10T00:46:23.143286" 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-10T00:46:23.143526" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.143382" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.143366" elapsed="0.000273"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.143147" elapsed="0.000516"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.143001" elapsed="0.000686"/>
</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-10T00:46:23.140347" elapsed="0.003393"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-10T00:46:23.132755" elapsed="0.011039"/>
</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-10T00:46:23.132322" elapsed="0.011514"/>
</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-10T00:46:23.106909" elapsed="0.036992"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.144797" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-10T00:46:23.144451" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-10T00:46:23.145011" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-10T00:46:23.144913" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.144895" elapsed="0.000195"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.145243" elapsed="0.000021"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.145415" elapsed="0.000021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.145587" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.145760" elapsed="0.000020"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.146017" elapsed="0.000024"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-10T00:46:23.144157" elapsed="0.001947"/>
</kw>
<status status="PASS" start="2026-04-10T00:46:23.106556" elapsed="0.039594"/>
</kw>
<test id="s1-s1-s2-t1" name="Check Shards Status Before Fail" line="17">
<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-10T00:46:23.149271" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.149011" elapsed="0.000520"/>
</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-10T00:46:23.150545" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.150427" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.150407" 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-10T00:46:23.155220" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.155113" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.155095" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.156258" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.155883" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.156748" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.156441" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.156819" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:46:23.156996" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.155503" 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-10T00:46:23.157403" 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-10T00:46:23.157640" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.157499" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.157482" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.157265" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.157109" 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-10T00:46:23.154739" elapsed="0.003127"/>
</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-10T00:46:23.150115" elapsed="0.007808"/>
</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-10T00:46:23.149678" elapsed="0.008289"/>
</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-10T00:46:23.146700" elapsed="0.011317"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.178069" elapsed="0.000231"/>
</kw>
<msg time="2026-04-10T00:46:23.178352" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.177405" elapsed="0.001002"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:23.176937" elapsed="0.001549"/>
</kw>
<msg time="2026-04-10T00:46:23.178533" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.168685" elapsed="0.009893"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:23.168279" elapsed="0.010375"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.179155" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:23.178861" 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-10T00:46:23.184151" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.183755" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.184791" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.184336" elapsed="0.000484"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.184887" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:23.185044" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.183393" elapsed="0.001675"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:23.185227" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.185896" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.185539" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.186315" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.186078" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.186720" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.186486" 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-10T00:46:23.187168" 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-10T00:46:23.187424" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.187281" 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-10T00:46:23.187639" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.187501" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.187930" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.187714" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.187263" elapsed="0.000847"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.187000" elapsed="0.001143"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.186792" elapsed="0.001386"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:23.188232" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:46:23.188509" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:23.188591" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:23.182677" elapsed="0.005947"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.189266" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:23.189370" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:23.188891" elapsed="0.000513"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.190195" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.189794" elapsed="0.000495">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:23.189497" elapsed="0.000883">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:23.189472" elapsed="0.000951">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.190797" 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-10T00:46:23.191062" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.191153" 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-10T00:46:23.180211" elapsed="0.011089">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:23.179990" elapsed="0.011407">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:23.179856" elapsed="0.011615">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.179455" elapsed="0.012380">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.192180" elapsed="0.000034"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.158232" elapsed="0.034108">No leader found.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.146203" elapsed="0.046324">No leader found.</status>
</test>
<test id="s1-s1-s2-t2" name="Start OVS Multiple Connections" line="21">
<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-10T00:46:23.197020" elapsed="0.000294"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.196532" elapsed="0.000859"/>
</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-10T00:46:23.198514" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.198404" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.198387" 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-10T00:46:23.203073" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.202967" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.202950" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.204119" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.203725" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.204622" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.204304" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.204695" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:23.204870" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.203358" 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-10T00:46:23.205280" 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-10T00:46:23.205517" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.205376" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.205360" elapsed="0.000231"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.205140" elapsed="0.000474"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.204987" elapsed="0.000651"/>
</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-10T00:46:23.202603" 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-10T00:46:23.198124" elapsed="0.007620"/>
</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-10T00:46:23.197662" elapsed="0.008125"/>
</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-10T00:46:23.193570" elapsed="0.012268"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.212736" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.212344" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.213223" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.212936" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.213294" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:23.213446" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${controller_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.211973" elapsed="0.001497"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.215878" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.215589" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.215570" elapsed="0.000390"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.216271" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:23.216372" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.216107" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.216975" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:23.216574" elapsed="0.000447"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.217538" level="INFO">${conn_id} = 27</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.217176" elapsed="0.000389"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.218441" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:23.218517" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:23.218181" elapsed="0.000360"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.218696" elapsed="0.000332"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.219872" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:23.220154" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.219546" elapsed="0.001100">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.220703" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.219194" elapsed="0.001559"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.217780" elapsed="0.003124">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.221081" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.221254" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.221428" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.221552" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.221512" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.221495" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.221704" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.221668" elapsed="0.000074"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.221652" elapsed="0.000111"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.221794" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.224457" elapsed="0.000332"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.224971" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.225267" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:23.222119" elapsed="0.003302"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.215073" elapsed="0.010425">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.225554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.214511" elapsed="0.011090"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.214037" elapsed="0.011664">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.225894" elapsed="0.000025"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:46:23.213669" elapsed="0.012337">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.226163" elapsed="0.000021"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.226417" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.226589" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.226290" elapsed="0.000350"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.226231" elapsed="0.000435"/>
</for>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.226861" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.227044" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.227219" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.227380" elapsed="0.000021"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.227604" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.227782" elapsed="0.000020"/>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.227867" elapsed="0.000018"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.209727" elapsed="0.018239">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.228128" elapsed="0.000021"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.192824" elapsed="0.035488">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10T00:46:23.231355" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.231099" elapsed="0.000518"/>
</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-10T00:46:23.232607" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.232480" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.232461" 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-10T00:46:23.237215" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.237110" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.237093" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.238259" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.237880" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.238728" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.238443" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.238798" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.238967" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.237499" elapsed="0.001492"/>
</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-10T00:46:23.239326" 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-10T00:46:23.239562" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.239421" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.239405" elapsed="0.000231"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.239189" elapsed="0.000470"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.239043" elapsed="0.000639"/>
</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-10T00:46:23.236740" elapsed="0.002993"/>
</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-10T00:46:23.232198" elapsed="0.007587"/>
</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-10T00:46:23.231763" elapsed="0.008066"/>
</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-10T00:46:23.229107" elapsed="0.010789"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:23.250996" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.247385" elapsed="0.003650">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.251204" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.251383" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.251549" elapsed="0.000020"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.228506" elapsed="0.023183">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t4" name="Create Bridge Manually and Verify Before Fail" line="35">
<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-10T00:46:23.254687" elapsed="0.000262"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.254431" elapsed="0.000572"/>
</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-10T00:46:23.255963" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.255837" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.255819" 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-10T00:46:23.260609" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.260476" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.260458" elapsed="0.000219"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.261651" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.261277" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.262135" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.261834" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.262206" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.262358" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.260910" elapsed="0.001473"/>
</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-10T00:46:23.262718" 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-10T00:46:23.262971" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.262813" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.262796" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.262580" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.262434" elapsed="0.000660"/>
</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-10T00:46:23.260121" 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-10T00:46:23.255557" elapsed="0.007642"/>
</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-10T00:46:23.255147" elapsed="0.008096"/>
</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-10T00:46:23.252420" elapsed="0.010874"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.271183" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.270922" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.270903" elapsed="0.000359"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.271536" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:23.271636" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.271407" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.272324" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:23.271875" elapsed="0.000496"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.273021" level="INFO">${conn_id} = 29</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.272541" elapsed="0.000506"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.273918" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:23.273995" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:23.273640" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.274173" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.275356" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:23.275576" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.275040" elapsed="0.000972">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.276100" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.274651" elapsed="0.001500"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.273256" elapsed="0.002996">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.276420" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.276667" elapsed="0.000025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.276905" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.277030" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.276992" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.276975" elapsed="0.000117"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.277176" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.277142" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.277127" elapsed="0.000107"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.277264" elapsed="0.000012"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.279886" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.280353" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.280686" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:23.277568" elapsed="0.003288"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.270387" elapsed="0.010545">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.280987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.269834" elapsed="0.011197"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.269351" elapsed="0.011775">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.281313" elapsed="0.000021"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.281501" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.281691" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.281904" elapsed="0.000021"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.267320" elapsed="0.014700">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.251892" elapsed="0.030254">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t5" name="Add Port Manually and Verify Before Fail" line="39">
<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-10T00:46:23.285132" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.284865" 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-10T00:46:23.286382" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.286275" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.286256" 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-10T00:46:23.291083" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.290978" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.290961" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.292165" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.291769" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.292664" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.292347" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.292735" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.292904" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.291400" 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-10T00:46:23.293268" 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-10T00:46:23.293505" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.293364" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.293347" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.293129" elapsed="0.000474"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.292981" elapsed="0.000646"/>
</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-10T00:46:23.290610" 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-10T00:46:23.285983" elapsed="0.007750"/>
</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-10T00:46:23.285545" elapsed="0.008235"/>
</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-10T00:46:23.282869" elapsed="0.010962"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.302791" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.302530" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.302511" elapsed="0.000376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.303160" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:23.303260" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.303032" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.303810" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:23.303433" elapsed="0.000437"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.304378" level="INFO">${conn_id} = 31</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.304025" elapsed="0.000379"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.305442" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:23.305518" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:23.305183" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.305697" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.306872" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:23.307102" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.306545" elapsed="0.000995">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.307600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.306196" elapsed="0.001454"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.304779" elapsed="0.003019">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.307988" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.308161" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.308334" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.308473" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.308419" elapsed="0.000096"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.308401" elapsed="0.000135"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.308620" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.308586" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.308571" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.308709" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.311367" elapsed="0.000309"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.311859" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.312160" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:23.309036" elapsed="0.003289"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.302011" elapsed="0.010435">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.312528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.301459" elapsed="0.011120"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.300966" elapsed="0.011713">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.312889" elapsed="0.000023"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.313077" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.313263" elapsed="0.000019"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.313457" elapsed="0.000019"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.298913" elapsed="0.014658">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.282335" elapsed="0.031375">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t6" name="Delete the Bridge Manually and Verify Before Fail" line="43">
<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-10T00:46:23.316915" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.316632" 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-10T00:46:23.318158" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.318044" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.318024" 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-10T00:46:23.322777" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.322671" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.322653" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.323836" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.323446" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.324367" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.324079" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.324456" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:23.324610" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.323082" 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-10T00:46:23.325002" 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-10T00:46:23.325241" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.325100" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.325083" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.324862" elapsed="0.000475"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.324689" 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-10T00:46:23.322315" elapsed="0.003101"/>
</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-10T00:46:23.317743" elapsed="0.007726"/>
</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-10T00:46:23.317326" elapsed="0.008186"/>
</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-10T00:46:23.314501" elapsed="0.011062"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.333714" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.333453" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.333434" elapsed="0.000360"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.334090" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:46:23.334191" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.333955" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.334740" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:23.334364" elapsed="0.000425"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.335370" level="INFO">${conn_id} = 33</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.335005" elapsed="0.000391"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.336285" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:23.336423" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:23.336017" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.336609" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:46:23.337776" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:46:23.338046" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.337459" elapsed="0.001032">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.338547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.337109" elapsed="0.001486"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.335612" elapsed="0.003082">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.338913" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.339137" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.339329" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.339460" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.339421" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.339403" elapsed="0.000119"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.339607" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.339572" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.339557" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.339695" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:23.342374" elapsed="0.000317"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.342880" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:46:23.343196" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:46:23.340027" elapsed="0.003319"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.332923" elapsed="0.010499">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:46:23.343481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.332181" elapsed="0.011348"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.331547" elapsed="0.012078">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.343812" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:23.344054" elapsed="0.000022"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.329522" elapsed="0.014651">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.313929" elapsed="0.030369">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t7" name="Create Bridge In Owner and Verify Before Fail" 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-10T00:46:23.347313" elapsed="0.000204"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.347056" elapsed="0.000515"/>
</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-10T00:46:23.348549" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.348440" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.348421" 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-10T00:46:23.353120" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.353015" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.352997" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.354162" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.353770" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.354627" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.354344" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.354696" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:46:23.354859" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.353403" elapsed="0.001482"/>
</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-10T00:46:23.355221" elapsed="0.000054"/>
</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-10T00:46:23.355496" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.355354" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.355337" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.355084" elapsed="0.000510"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.354937" elapsed="0.000681"/>
</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-10T00:46:23.352643" elapsed="0.003025"/>
</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-10T00:46:23.348145" elapsed="0.007576"/>
</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-10T00:46:23.347714" elapsed="0.008051"/>
</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-10T00:46:23.345072" elapsed="0.010743"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:23.367357" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.363649" elapsed="0.003746">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.344530" elapsed="0.022994">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t8" name="Create Port In Owner and Verify Before Fail" 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-10T00:46:23.370486" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.370233" elapsed="0.000523"/>
</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-10T00:46:23.371791" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.371683" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.371665" 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-10T00:46:23.376520" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.376412" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.376393" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.377687" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.377262" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.378177" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.377886" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.378249" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.378403" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.376810" elapsed="0.001618"/>
</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-10T00:46:23.378772" 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-10T00:46:23.379030" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.378886" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.378867" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.378627" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.378480" 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-10T00:46:23.376006" elapsed="0.003199"/>
</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-10T00:46:23.371401" elapsed="0.007860"/>
</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-10T00:46:23.370942" elapsed="0.008362"/>
</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-10T00:46:23.368237" elapsed="0.011119"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:23.391085" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.387222" elapsed="0.003903">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.367711" elapsed="0.023550">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t9" name="Modify the destination IP of Port In Owner Before Fail" 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-10T00:46:23.394867" elapsed="0.000220"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.394588" elapsed="0.000555"/>
</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-10T00:46:23.396119" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.396010" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.395991" 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-10T00:46:23.400720" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.400615" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.400597" elapsed="0.000233"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.401904" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.401474" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.402374" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.402087" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.402474" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:23.402629" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.401074" elapsed="0.001580"/>
</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-10T00:46:23.403026" 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-10T00:46:23.403312" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.403152" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.403133" elapsed="0.000258"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.402871" elapsed="0.000543"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.402705" elapsed="0.000733"/>
</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-10T00:46:23.400252" elapsed="0.003238"/>
</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-10T00:46:23.395711" elapsed="0.007833"/>
</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-10T00:46:23.395289" elapsed="0.008299"/>
</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-10T00:46:23.391979" elapsed="0.011660"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:23.411531" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.407830" elapsed="0.003739">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.391456" elapsed="0.020243">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t10" name="Verify Port Is Modified Before Fail" 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-10T00:46:23.414650" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:23.414394" 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-10T00:46:23.415905" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.415780" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.415760" 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-10T00:46:23.420695" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:23.420586" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:23.420567" elapsed="0.000205"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.421805" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:23.421380" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.422298" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:23.422009" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:23.422370" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:23.422522" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:23.421012" elapsed="0.001535"/>
</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-10T00:46:23.422897" 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-10T00:46:23.423136" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:23.422995" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:23.422978" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:23.422743" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:23.422598" elapsed="0.000659"/>
</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-10T00:46:23.420216" elapsed="0.003091"/>
</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-10T00:46:23.415493" elapsed="0.007868"/>
</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-10T00:46:23.415081" elapsed="0.008323"/>
</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-10T00:46:23.412379" elapsed="0.011076"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:46:23.429631" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:46:23.429286" elapsed="0.000373"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:23.441794" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.438011" elapsed="0.003820">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:24.459529" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:24.455652" elapsed="0.003938">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:25.477720" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:25.473916" elapsed="0.003855">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:26.496807" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:26.492820" elapsed="0.004058">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:27.516078" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:27.512135" elapsed="0.003998">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:46:28.534801" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.530968" elapsed="0.003896">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:46:28.535094" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:46:23.429865" elapsed="5.105376">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.427307" elapsed="5.108063">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:23.411906" elapsed="5.123622">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t11" name="Delete Port In Owner Before Fail" line="63">
<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-10T00:46:28.538611" elapsed="0.000328"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.538342" elapsed="0.000669"/>
</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-10T00:46:28.540088" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.539951" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.539927" 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-10T00:46:28.544675" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.544567" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.544548" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.545753" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.545360" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.546248" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.545954" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.546318" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:28.546475" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.544987" elapsed="0.001512"/>
</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-10T00:46:28.546899" 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-10T00:46:28.547146" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.547000" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.546983" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.546716" elapsed="0.000528"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.546558" 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-10T00:46:28.544210" elapsed="0.003114"/>
</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-10T00:46:28.539633" elapsed="0.007744"/>
</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-10T00:46:28.539174" elapsed="0.008246"/>
</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-10T00:46:28.536320" elapsed="0.011151"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.559286" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.555476" elapsed="0.003851">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.535755" elapsed="0.023719">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t12" name="Delete Bridge In Owner And Verify Before Fail" line="67">
<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-10T00:46:28.562458" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.562200" 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-10T00:46:28.563801" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.563688" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.563668" 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-10T00:46:28.568418" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.568310" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.568292" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.569477" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.569095" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.569967" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.569663" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.570038" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:28.570195" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.568707" elapsed="0.001512"/>
</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-10T00:46:28.570562" 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-10T00:46:28.570798" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.570657" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.570641" elapsed="0.000283"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.570423" elapsed="0.000525"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.570272" 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-10T00:46:28.567946" 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-10T00:46:28.563400" elapsed="0.007686"/>
</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-10T00:46:28.562904" elapsed="0.008227"/>
</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-10T00:46:28.560236" elapsed="0.010946"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.582780" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.578862" elapsed="0.003962">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.559680" elapsed="0.023349">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t13" name="Kill Candidate Instance" line="71">
<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-10T00:46:28.586251" elapsed="0.000245"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.585979" elapsed="0.000577"/>
</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-10T00:46:28.587624" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.587492" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.587469" elapsed="0.000228"/>
</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-10T00:46:28.592271" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.592162" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.592144" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.593353" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.592954" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.593833" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.593540" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.593922" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:28.594081" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.592566" 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-10T00:46:28.594525" 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-10T00:46:28.594769" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.594624" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.594606" elapsed="0.000292"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.594381" elapsed="0.000542"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.594219" elapsed="0.000730"/>
</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-10T00:46:28.591790" 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-10T00:46:28.587192" elapsed="0.007869"/>
</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-10T00:46:28.586708" elapsed="0.008397"/>
</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-10T00:46:28.583791" elapsed="0.011366"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:46:28.599529" level="FAIL">Variable '${original_candidate}' not found.</msg>
<var>${new_cluster_list}</var>
<arg>${original_candidate}</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-10T00:46:28.595407" elapsed="0.004160">Variable '${original_candidate}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:28.599768" elapsed="0.000022"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-04-10T00:46:28.583250" elapsed="0.016679">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t14" name="Check Shards Status After Fail" line="76">
<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-10T00:46:28.603134" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.602875" 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-10T00:46:28.604379" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.604267" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.604248" 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-10T00:46:28.609011" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.608901" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.608882" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.610084" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.609677" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.610556" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.610270" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.610626" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:28.610783" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.609306" elapsed="0.001517"/>
</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-10T00:46:28.611185" 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-10T00:46:28.611422" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.611280" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.611263" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.611046" elapsed="0.000472"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.610893" elapsed="0.000650"/>
</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-10T00:46:28.608527" 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-10T00:46:28.603982" elapsed="0.007666"/>
</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-10T00:46:28.603549" elapsed="0.008142"/>
</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-10T00:46:28.600757" elapsed="0.011046"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.615992" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.612023" elapsed="0.004009">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.600168" elapsed="0.016007">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t15" name="Check Entity Owner Status And Find Owner and Candidate After Fail" 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-10T00:46:28.619497" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.619235" 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-10T00:46:28.620790" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.620670" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.620650" elapsed="0.000228"/>
</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-10T00:46:28.625444" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.625334" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.625316" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.626520" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.626130" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.627058" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.626707" elapsed="0.000378"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.627133" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:28.627293" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.625735" elapsed="0.001583"/>
</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-10T00:46:28.627730" 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-10T00:46:28.628038" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.627858" elapsed="0.000241"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.627823" elapsed="0.000304"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.627560" elapsed="0.000594"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.627375" elapsed="0.000808"/>
</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-10T00:46:28.624977" elapsed="0.003267"/>
</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-10T00:46:28.620380" elapsed="0.007925"/>
</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-10T00:46:28.619942" elapsed="0.008417"/>
</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-10T00:46:28.617076" elapsed="0.011336"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.641117" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.635723" elapsed="0.005433">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:28.641335" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:28.641514" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:28.641679" elapsed="0.000019"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.616421" elapsed="0.025408">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t16" name="Create Bridge Manually and Verify After Fail" line="90">
<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-10T00:46:28.645131" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.644869" 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-10T00:46:28.646488" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.646372" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.646353" 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-10T00:46:28.651131" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.651024" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.651006" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.652176" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.651780" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.652647" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.652362" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.652718" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:28.652887" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.651414" 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-10T00:46:28.653260" 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-10T00:46:28.653499" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.653356" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.653340" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.653120" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.652966" elapsed="0.000657"/>
</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-10T00:46:28.650634" elapsed="0.003042"/>
</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-10T00:46:28.646072" elapsed="0.007657"/>
</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-10T00:46:28.645593" elapsed="0.008179"/>
</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-10T00:46:28.642689" elapsed="0.011133"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.661433" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.657661" elapsed="0.003809">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.642092" elapsed="0.019509">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t17" name="Add Port Manually and Verify After Fail" line="94">
<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-10T00:46:28.665021" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.664740" 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-10T00:46:28.666272" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.666164" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.666145" 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-10T00:46:28.670963" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.670835" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.670815" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.672024" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.671623" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.672501" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.672211" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.672573" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:28.672772" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.671251" elapsed="0.001547"/>
</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-10T00:46:28.673161" 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-10T00:46:28.673402" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.673259" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.673242" elapsed="0.000237"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.673020" elapsed="0.000482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.672868" 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-10T00:46:28.670455" 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-10T00:46:28.665874" elapsed="0.007760"/>
</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-10T00:46:28.665441" elapsed="0.008236"/>
</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-10T00:46:28.662421" elapsed="0.011308"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.681345" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.677553" elapsed="0.003830">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.661834" elapsed="0.019680">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t18" name="Delete the Bridge Manually and Verify After Fail" 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-10T00:46:28.684710" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.684449" 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-10T00:46:28.685974" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.685859" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.685826" 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-10T00:46:28.690816" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.690699" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.690681" elapsed="0.000219"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.691881" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.691492" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.692349" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.692066" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.692419" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:28.692572" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.691122" elapsed="0.001474"/>
</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-10T00:46:28.692947" 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-10T00:46:28.693185" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.693045" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.693028" elapsed="0.000230"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.692795" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.692648" elapsed="0.000657"/>
</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-10T00:46:28.690344" elapsed="0.003012"/>
</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-10T00:46:28.685560" elapsed="0.007889"/>
</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-10T00:46:28.685143" elapsed="0.008352"/>
</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-10T00:46:28.682358" elapsed="0.011188"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.701154" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.697362" elapsed="0.003829">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.681743" elapsed="0.019580">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t19" name="Create Bridge In Owner and Verify After Fail" line="102">
<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-10T00:46:28.704634" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.704374" 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-10T00:46:28.705871" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.705748" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.705730" 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-10T00:46:28.710567" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.710457" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.710439" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.711661" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.711277" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.712159" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.711864" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.712231" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:28.712387" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.710902" elapsed="0.001509"/>
</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-10T00:46:28.712756" 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-10T00:46:28.713017" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.712869" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.712837" elapsed="0.000262"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.712616" elapsed="0.000506"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.712465" 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-10T00:46:28.710090" elapsed="0.003109"/>
</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-10T00:46:28.705470" elapsed="0.007784"/>
</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-10T00:46:28.705060" elapsed="0.008238"/>
</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-10T00:46:28.702159" elapsed="0.011190"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.724855" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.721289" elapsed="0.003606">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.701560" elapsed="0.023473">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t20" name="Create Port In Owner and Verify After Fail" line="106">
<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-10T00:46:28.728248" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.727987" elapsed="0.000524"/>
</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-10T00:46:28.729471" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.729363" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.729345" 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-10T00:46:28.734201" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.734083" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.734061" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.735358" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.734969" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.735826" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.735541" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.735914" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:28.736070" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.734502" elapsed="0.001593"/>
</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-10T00:46:28.736436" 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-10T00:46:28.736671" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.736532" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.736515" elapsed="0.000230"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.736295" elapsed="0.000473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.736148" elapsed="0.000644"/>
</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-10T00:46:28.733686" 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-10T00:46:28.729083" elapsed="0.007832"/>
</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-10T00:46:28.728657" elapsed="0.008301"/>
</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-10T00:46:28.725867" elapsed="0.011143"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.748248" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.744618" elapsed="0.003686">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.725274" elapsed="0.023223">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t21" name="Modify the destination IP of Port In Owner After Fail" 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-10T00:46:28.752415" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.752156" 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-10T00:46:28.753669" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.753557" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.753538" 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-10T00:46:28.758267" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.758160" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.758142" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.759344" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.758959" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.759812" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.759527" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.759900" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:28.760054" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.758557" 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-10T00:46:28.760488" 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-10T00:46:28.760728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.760585" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.760568" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.760347" elapsed="0.000479"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.760191" 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-10T00:46:28.757792" elapsed="0.003128"/>
</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-10T00:46:28.753272" elapsed="0.007702"/>
</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-10T00:46:28.752833" elapsed="0.008185"/>
</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-10T00:46:28.749495" elapsed="0.011579"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.768626" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.765119" elapsed="0.003544">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.748764" elapsed="0.020035">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t22" name="Verify Port Is Modified After Fail" line="114">
<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-10T00:46:28.771692" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.771434" 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-10T00:46:28.772941" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.772816" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.772798" 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-10T00:46:28.777725" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.777620" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.777602" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.778784" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.778391" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.779273" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.778986" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.779344" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:28.779497" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.778025" elapsed="0.001497"/>
</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-10T00:46:28.779875" 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-10T00:46:28.780121" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.779972" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.779956" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.779722" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.779574" elapsed="0.000669"/>
</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-10T00:46:28.777266" elapsed="0.003029"/>
</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-10T00:46:28.772535" elapsed="0.007815"/>
</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-10T00:46:28.772121" elapsed="0.008273"/>
</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-10T00:46:28.769456" elapsed="0.010988"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-04-10T00:46:28.788178" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.784371" elapsed="0.003847">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.769001" elapsed="0.019359">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s1-s2-t23" name="Start Old Candidate Instance" line="118">
<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-10T00:46:28.791321" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.791059" 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-10T00:46:28.792614" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.792493" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.792473" 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-10T00:46:28.797207" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.797099" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.797081" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.798261" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.797880" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.798756" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.798444" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.798827" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:46:28.799000" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.797495" elapsed="0.001530"/>
</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-10T00:46:28.799375" 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-10T00:46:28.799614" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.799471" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.799454" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.799235" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.799084" 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-10T00:46:28.796729" elapsed="0.003060"/>
</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-10T00:46:28.792206" elapsed="0.007651"/>
</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-10T00:46:28.791761" elapsed="0.008142"/>
</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-10T00:46:28.789050" elapsed="0.010905"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:46:28.804257" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.800176" elapsed="0.004119">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-04-10T00:46:28.788563" elapsed="0.015862">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t24" name="Check Shards Status After Recover" 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-10T00:46:28.807382" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:46:28.807125" elapsed="0.000519"/>
</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-10T00:46:28.808611" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.808503" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.808485" 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-10T00:46:28.813207" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:46:28.813102" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:46:28.813084" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.814296" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.813870" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.814793" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.814480" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.814881" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:28.815036" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.813491" 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-10T00:46:28.815401" 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-10T00:46:28.815639" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.815498" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.815482" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.815262" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.815113" elapsed="0.000649"/>
</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-10T00:46:28.812737" 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-10T00:46:28.808222" elapsed="0.007664"/>
</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-10T00:46:28.807792" elapsed="0.008139"/>
</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-10T00:46:28.805140" elapsed="0.010844"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:28.836625" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:46:28.836916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:28.836013" elapsed="0.000954"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:28.835545" elapsed="0.001497"/>
</kw>
<msg time="2026-04-10T00:46:28.837086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:28.827607" elapsed="0.009523"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:28.827222" elapsed="0.009981"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.837627" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:28.837375" elapsed="0.000296"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.842586" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.842199" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.843073" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.842771" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:28.843143" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:28.843294" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:28.841820" 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-10T00:46:28.843467" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.844124" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:28.843778" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.844586" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.844345" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.845166" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:28.844758" 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-10T00:46:28.845584" 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-10T00:46:28.845831" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.845689" 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-10T00:46:28.846065" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.845925" 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-10T00:46:28.846277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:28.846140" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:28.845671" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:28.845421" elapsed="0.000952"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.845240" elapsed="0.001158"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:28.846436" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:28.846663" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:28.846709" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:28.841116" elapsed="0.005617"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.847200" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:28.847278" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:28.846919" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:28.847864" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.847582" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:28.847368" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:28.847350" 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-10T00:46:28.848182" 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-10T00:46:28.848353" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:28.848417" 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-10T00:46:28.838643" elapsed="0.009881">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:28.838411" elapsed="0.010183">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:28.838285" elapsed="0.010363">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.837905" elapsed="0.010831">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:28.848980" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.818875" elapsed="0.030225">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:29.876160" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:46:29.876479" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:29.875486" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:29.875024" elapsed="0.001693"/>
</kw>
<msg time="2026-04-10T00:46:29.876765" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:29.865689" elapsed="0.011121"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:29.865106" elapsed="0.011796"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.877356" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:29.877092" 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-10T00:46:29.882667" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:29.882275" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.883171" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:29.882869" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:29.883248" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:29.883409" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:29.881899" 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-10T00:46:29.883587" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.884256" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:29.883918" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.884678" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:29.884439" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.885103" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:29.884862" 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-10T00:46:29.885517" 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-10T00:46:29.885785" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:29.885640" 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-10T00:46:29.886020" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:29.885880" 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-10T00:46:29.886232" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:29.886095" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:29.885621" elapsed="0.000683"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:29.885353" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:29.885174" elapsed="0.001180"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:29.886393" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:29.886592" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:29.886637" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:29.881128" elapsed="0.005532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.887117" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:29.887191" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:29.886828" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:29.887772" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:29.887496" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:29.887282" elapsed="0.000682">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:29.887264" elapsed="0.000732">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:29.888149" 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-10T00:46:29.888320" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:29.888386" 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-10T00:46:29.878426" elapsed="0.010070">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:29.878193" elapsed="0.010373">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:29.878052" elapsed="0.010569">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:29.877638" elapsed="0.011071">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:29.888955" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:29.849985" elapsed="0.039088">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:30.915235" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:46:30.915553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:30.914553" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:30.914092" elapsed="0.001614"/>
</kw>
<msg time="2026-04-10T00:46:30.915754" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:30.905755" elapsed="0.010043"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:30.905344" elapsed="0.010545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.916345" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:30.916084" 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-10T00:46:30.921514" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:30.921115" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.922028" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:30.921703" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:30.922105" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:30.922272" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:30.920707" 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-10T00:46:30.922450" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.923146" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:30.922772" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.923660" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:30.923385" elapsed="0.000303"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.924142" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:30.923876" elapsed="0.000300"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:30.924652" elapsed="0.000094"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:30.925017" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:30.924861" 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-10T00:46:30.925241" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:30.925101" 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-10T00:46:30.925459" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:30.925320" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:30.924819" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:30.924437" elapsed="0.001134"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:30.924237" elapsed="0.001361"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:30.925639" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:46:30.925872" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:30.925923" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:30.919966" elapsed="0.005981"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.926463" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:30.926547" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:30.926121" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:30.927388" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:30.927097" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:30.926835" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:30.926627" 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-10T00:46:30.927711" 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-10T00:46:30.927906" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:30.927976" 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-10T00:46:30.917437" elapsed="0.010648">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:30.917201" elapsed="0.010953">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:30.917056" elapsed="0.011153">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:30.916634" elapsed="0.011663">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:30.928543" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:30.889843" elapsed="0.038817">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:31.956082" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:46:31.956412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:31.955394" elapsed="0.001098"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:31.954931" elapsed="0.001649"/>
</kw>
<msg time="2026-04-10T00:46:31.956626" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:31.946819" elapsed="0.009851"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:31.946404" elapsed="0.010457"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.957311" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:31.957050" 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-10T00:46:31.964300" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:31.963706" elapsed="0.000624"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.964782" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:31.964493" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:31.964871" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:46:31.965043" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:31.963320" elapsed="0.001748"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:31.965221" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.965891" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:31.965540" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.966313" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:31.966073" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.966766" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:31.966483" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:31.967219" 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-10T00:46:31.967469" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:31.967325" elapsed="0.000266"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:31.967776" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:31.967623" 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-10T00:46:31.968016" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:31.967874" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:31.967306" elapsed="0.000784"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:31.967053" elapsed="0.001060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:31.966839" elapsed="0.001298"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:31.968175" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:31.968380" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:31.968425" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:31.962577" elapsed="0.005871"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.968905" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:31.968981" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:31.968615" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:31.969563" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:31.969285" elapsed="0.000346">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:31.969072" elapsed="0.000623">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:31.969053" elapsed="0.000673">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:31.969892" 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-10T00:46:31.970063" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:31.970128" elapsed="0.000076"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:46:31.958439" elapsed="0.011863">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:31.958193" elapsed="0.012178">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:31.958049" elapsed="0.012377">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:31.957594" elapsed="0.012921">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:31.970746" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:31.929459" elapsed="0.041416">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:32.996787" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:46:32.997123" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:32.996137" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:32.995658" elapsed="0.001609"/>
</kw>
<msg time="2026-04-10T00:46:32.997333" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:32.987512" elapsed="0.009885"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:32.987092" elapsed="0.010388"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:32.997981" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:32.997672" 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-10T00:46:33.003225" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:33.002797" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.003719" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:33.003425" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:33.003794" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:33.003973" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:33.002410" 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-10T00:46:33.004148" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.004806" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:33.004463" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.005250" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:33.005006" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.005679" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:33.005436" 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-10T00:46:33.006124" 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-10T00:46:33.006403" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:33.006241" 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-10T00:46:33.006779" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:33.006492" elapsed="0.000369"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:33.007031" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:33.006888" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:33.006220" elapsed="0.000884"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:33.005954" elapsed="0.001175"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:33.005754" elapsed="0.001400"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:33.007199" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:33.007402" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:33.007447" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:33.001672" elapsed="0.005798"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.007933" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:33.008011" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:33.007638" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:33.008787" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:33.008316" elapsed="0.000559">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:33.008103" elapsed="0.000843">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:33.008085" 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-10T00:46:33.009130" 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-10T00:46:33.009300" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:33.009366" 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-10T00:46:32.999122" elapsed="0.010352">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:32.998885" elapsed="0.010659">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:32.998724" elapsed="0.010874">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:32.998306" 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-10T00:46:33.009930" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:32.971730" elapsed="0.038316">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:34.037061" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:46:34.037387" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:34.036388" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:34.035921" elapsed="0.001614"/>
</kw>
<msg time="2026-04-10T00:46:34.037604" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:34.026412" elapsed="0.011243"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:34.025813" elapsed="0.011918"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.038199" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:34.037939" 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-10T00:46:34.043482" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:34.043093" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.043972" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:34.043667" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:34.044047" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:34.044206" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:34.042710" elapsed="0.001520"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:34.044380" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.045041" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:34.044692" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.045674" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:34.045221" elapsed="0.000480"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.046113" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:34.045864" 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-10T00:46:34.046538" 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-10T00:46:34.046794" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:34.046648" 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-10T00:46:34.047036" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:34.046896" 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-10T00:46:34.047249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:34.047112" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:34.046629" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:34.046370" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:34.046188" elapsed="0.001187"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:34.047415" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:34.047617" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:34.047663" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:34.041992" elapsed="0.005694"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.048147" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:34.048225" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:34.047869" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:34.048815" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:34.048534" elapsed="0.000395">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:34.048319" elapsed="0.000687">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:34.048301" elapsed="0.000737">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:34.049206" 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-10T00:46:34.049380" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:34.049447" 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-10T00:46:34.039293" elapsed="0.010283">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:34.039033" elapsed="0.010616">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:34.038886" elapsed="0.010818">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:34.038476" 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-10T00:46:34.050088" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:34.010841" elapsed="0.039363">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:35.075597" elapsed="0.000277"/>
</kw>
<msg time="2026-04-10T00:46:35.075944" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:35.074916" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:35.074420" elapsed="0.001677"/>
</kw>
<msg time="2026-04-10T00:46:35.076146" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:35.066099" elapsed="0.010094"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:35.065638" elapsed="0.010633"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.076761" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:35.076468" 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-10T00:46:35.082419" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:35.081938" elapsed="0.000517"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.083102" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:35.082636" elapsed="0.000500"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:35.083203" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:46:35.083384" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:35.081486" 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-10T00:46:35.083572" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.084281" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:35.083925" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.084755" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:35.084469" elapsed="0.000314"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.085213" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:35.084960" 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-10T00:46:35.085651" 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-10T00:46:35.085929" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:35.085763" 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-10T00:46:35.086163" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:35.086018" 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-10T00:46:35.086385" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:35.086242" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:35.085742" elapsed="0.000721"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:35.085478" elapsed="0.001010"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:35.085289" elapsed="0.001295"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:35.086630" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:35.086858" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:35.086912" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:35.080663" elapsed="0.006277"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.087417" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:35.087498" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:35.087123" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:35.088136" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:35.087818" elapsed="0.000394">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:35.087597" elapsed="0.000683">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:35.087578" 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-10T00:46:35.088466" 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-10T00:46:35.088654" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:35.088725" 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-10T00:46:35.077899" elapsed="0.010962">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:35.077628" elapsed="0.011313">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:35.077485" elapsed="0.011525">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:35.077076" elapsed="0.012041">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:35.089356" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:35.051117" elapsed="0.038362">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:36.114231" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:46:36.114549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:36.113563" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:36.113103" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:46:36.114740" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:36.105080" elapsed="0.009704"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:36.104656" elapsed="0.010217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.115328" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:36.115068" 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-10T00:46:36.120353" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:36.119967" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.120823" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:36.120536" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:36.120983" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:46:36.121148" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:36.119569" 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-10T00:46:36.121327" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.122008" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:36.121648" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.122441" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:36.122195" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.122874" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:36.122616" 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-10T00:46:36.123299" 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-10T00:46:36.123551" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:36.123407" 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-10T00:46:36.123797" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:36.123633" 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-10T00:46:36.124034" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:36.123894" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:36.123388" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:36.123134" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:36.122950" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:36.124198" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:46:36.124397" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:36.124443" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:36.118864" elapsed="0.005603"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.124921" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:36.124999" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:36.124635" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:36.125766" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:36.125305" elapsed="0.000534">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:36.125091" elapsed="0.000837">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:36.125073" 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-10T00:46:36.126110" 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-10T00:46:36.126279" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:36.126346" 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-10T00:46:36.116385" elapsed="0.010067">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:36.116157" elapsed="0.010363">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:36.116017" elapsed="0.010557">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:36.115596" elapsed="0.011066">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:36.126910" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:36.090323" elapsed="0.036741">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:37.155057" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:46:37.155377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:37.154354" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:37.153889" elapsed="0.001637"/>
</kw>
<msg time="2026-04-10T00:46:37.155573" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:37.145727" elapsed="0.009890"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:37.145312" elapsed="0.010380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.156159" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:37.155896" 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-10T00:46:37.161250" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:37.160858" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.161728" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:37.161436" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:37.161805" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:37.161980" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:37.160468" 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-10T00:46:37.162158" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.163058" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:37.162477" elapsed="0.000609"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.163497" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:37.163249" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.163931" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:37.163673" 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-10T00:46:37.164362" 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-10T00:46:37.164619" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:37.164473" 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-10T00:46:37.164855" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:37.164701" 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-10T00:46:37.165077" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:37.164935" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:37.164453" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:37.164192" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:37.164006" elapsed="0.001195"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:37.165241" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:37.165443" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:37.165490" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:37.159738" elapsed="0.005776"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.166051" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:37.166130" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:37.165756" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:37.166733" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:37.166444" elapsed="0.000388">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:37.166226" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:37.166207" elapsed="0.000745">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:37.167106" 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-10T00:46:37.167280" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:37.167348" 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-10T00:46:37.157224" elapsed="0.010232">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:37.156988" elapsed="0.010538">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:37.156826" elapsed="0.010755">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:37.156432" elapsed="0.011240">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:37.167920" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:37.127902" elapsed="0.040135">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:38.196306" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:46:38.196626" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:38.195635" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:38.195170" elapsed="0.001602"/>
</kw>
<msg time="2026-04-10T00:46:38.196818" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:38.185463" elapsed="0.011414"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:38.184840" elapsed="0.012114"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.197405" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:38.197146" 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-10T00:46:38.202922" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:38.202382" elapsed="0.000580"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.203600" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:38.203187" elapsed="0.000450"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:38.203703" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:46:38.203950" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:38.202001" elapsed="0.001986"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:38.204200" elapsed="0.000222"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.205151" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:38.204645" elapsed="0.000544"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.205892" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:38.205500" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.206494" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:38.206145" 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-10T00:46:38.207116" 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-10T00:46:38.207471" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:38.207267" 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-10T00:46:38.207783" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:38.207584" elapsed="0.000295"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:38.208114" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:38.207915" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:38.207240" elapsed="0.000978"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:38.206881" elapsed="0.001373"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:38.206599" elapsed="0.001691"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:38.208347" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:46:38.208632" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:38.208698" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:38.201216" elapsed="0.007516"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.209384" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:38.209501" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:38.208997" elapsed="0.000538"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:38.210385" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:38.209988" elapsed="0.000494">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:38.209638" elapsed="0.000935">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:38.209611" elapsed="0.001006">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:38.210830" elapsed="0.000052"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:38.211094" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:38.211188" 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-10T00:46:38.198485" elapsed="0.012855">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:38.198245" elapsed="0.013195">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:38.198102" elapsed="0.013416">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:38.197677" elapsed="0.013972">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:38.211999" elapsed="0.000035"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:38.168808" elapsed="0.043358">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:39.236395" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:46:39.236708" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:39.235733" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:39.235266" elapsed="0.001699"/>
</kw>
<msg time="2026-04-10T00:46:39.237014" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:39.227087" elapsed="0.009973"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:39.226660" elapsed="0.010476"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.237586" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:39.237324" 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-10T00:46:39.242614" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:39.242229" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.243102" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:39.242797" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:39.243175" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:39.243332" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:39.241863" elapsed="0.001493"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:39.243505" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.244166" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:39.243817" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.244581" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:39.244345" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.245028" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:39.244749" 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-10T00:46:39.245444" 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-10T00:46:39.245693" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:39.245550" 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-10T00:46:39.245925" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:39.245772" 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-10T00:46:39.246142" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:39.246003" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:39.245530" elapsed="0.000686"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:39.245279" elapsed="0.000961"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:39.245100" elapsed="0.001165"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:39.246305" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:39.246530" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:39.246577" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:39.241143" elapsed="0.005458"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.247064" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:39.247140" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:39.246768" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:39.247910" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:39.247615" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:39.247232" elapsed="0.000850">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:39.247214" 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-10T00:46:39.248269" 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-10T00:46:39.248439" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:39.248505" 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-10T00:46:39.238638" elapsed="0.009973">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:39.238410" elapsed="0.010275">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:39.238271" elapsed="0.010488">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:39.237877" elapsed="0.010995">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:39.249120" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:39.213091" elapsed="0.036149">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:40.274151" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:46:40.274482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:40.273431" elapsed="0.001117"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:40.272891" elapsed="0.001739"/>
</kw>
<msg time="2026-04-10T00:46:40.274678" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:40.264636" elapsed="0.010089"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:40.263910" elapsed="0.010890"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.275284" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:40.275020" 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-10T00:46:40.281490" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:40.281067" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.281991" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:40.281681" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:40.282067" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:46:40.282236" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:40.280671" 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-10T00:46:40.282411" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.283095" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:40.282738" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.283520" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:40.283277" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.283946" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:40.283689" 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-10T00:46:40.284411" 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-10T00:46:40.284753" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:40.284604" 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-10T00:46:40.284992" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:40.284835" 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-10T00:46:40.285211" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:40.285071" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:40.284582" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:40.284238" elapsed="0.001071"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:40.284023" elapsed="0.001313"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:40.285376" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:40.285579" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:40.285625" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:40.279934" elapsed="0.005715"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.286117" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:40.286193" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:40.285819" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:40.286785" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:40.286501" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:40.286286" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:40.286267" 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-10T00:46:40.287127" 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-10T00:46:40.287298" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:40.287365" 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-10T00:46:40.277073" elapsed="0.010399">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:40.276810" elapsed="0.010731">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:40.275990" elapsed="0.011606">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:40.275568" elapsed="0.012124">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:40.287939" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:40.250106" elapsed="0.037949">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:41.314570" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:46:41.314896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:41.313932" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:41.313462" elapsed="0.001574"/>
</kw>
<msg time="2026-04-10T00:46:41.315081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:41.305446" elapsed="0.009678"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:41.305033" elapsed="0.010245"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.315721" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:41.315463" 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-10T00:46:41.320770" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:41.320382" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.321260" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:41.320970" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:41.321335" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:41.321492" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:41.320012" elapsed="0.001505"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:41.321666" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.322333" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:41.321998" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.322753" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:41.322513" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.323177" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:41.322938" 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-10T00:46:41.323704" 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-10T00:46:41.324047" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:41.323892" 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-10T00:46:41.324290" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:41.324140" 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-10T00:46:41.324513" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:41.324368" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:41.323868" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:41.323507" elapsed="0.001112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:41.323274" elapsed="0.001371"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:41.324692" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:41.324920" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:41.324966" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:41.319265" elapsed="0.005725"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.325433" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:41.325509" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:41.325161" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:41.326320" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:41.325830" elapsed="0.000565">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:41.325600" elapsed="0.000865">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:41.325581" elapsed="0.000916">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:41.326674" 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-10T00:46:41.326875" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:41.326946" 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-10T00:46:41.316762" elapsed="0.010334">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:41.316537" elapsed="0.010633">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:41.316399" elapsed="0.010849">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:41.316005" elapsed="0.011337">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:41.327594" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:41.288891" elapsed="0.038821">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:42.354903" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:46:42.355234" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:42.353915" elapsed="0.001386"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:42.353256" elapsed="0.002126"/>
</kw>
<msg time="2026-04-10T00:46:42.355427" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:42.343524" elapsed="0.011948"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:42.343105" elapsed="0.012440"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.356018" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:42.355741" 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-10T00:46:42.361133" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:42.360725" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.361606" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:42.361319" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:42.361679" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:42.361837" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:42.360354" 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-10T00:46:42.362035" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.362732" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:42.362347" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.363371" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:42.362930" elapsed="0.000468"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.363797" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:42.363548" 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-10T00:46:42.364243" 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-10T00:46:42.364501" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:42.364354" 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-10T00:46:42.364723" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:42.364582" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:42.365039" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:42.364893" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:42.364334" elapsed="0.000782"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:42.364073" elapsed="0.001067"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:42.363887" elapsed="0.001279"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:42.365206" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:42.365410" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:42.365457" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:42.359591" elapsed="0.005891"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.365948" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:42.366026" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:42.365652" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:42.366642" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:42.366339" elapsed="0.000397">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:42.366122" elapsed="0.000687">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:42.366102" 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-10T00:46:42.367051" 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-10T00:46:42.367239" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:42.367315" 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-10T00:46:42.357096" elapsed="0.010348">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:42.356856" elapsed="0.010665">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:42.356687" elapsed="0.010897">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:42.356293" elapsed="0.011398">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:42.367963" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:42.328650" elapsed="0.039432">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:43.394734" elapsed="0.000280"/>
</kw>
<msg time="2026-04-10T00:46:43.395087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:43.394024" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:43.393495" elapsed="0.001738"/>
</kw>
<msg time="2026-04-10T00:46:43.395279" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:43.385377" elapsed="0.009947"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:43.384960" elapsed="0.010438"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.395896" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:43.395613" 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-10T00:46:43.401562" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:43.401128" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.402112" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:43.401756" elapsed="0.000384"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:43.402190" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:46:43.402356" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:43.400637" elapsed="0.001746"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:43.402537" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.403253" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:43.402893" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.403717" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:43.403460" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.404187" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:43.403938" 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-10T00:46:43.404662" 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-10T00:46:43.404951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:43.404784" 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-10T00:46:43.405175" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:43.405034" 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-10T00:46:43.405408" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:43.405253" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:43.404763" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:43.404458" elapsed="0.001126"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:43.404273" elapsed="0.001347"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:43.405666" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:43.405898" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:43.405947" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:43.399883" elapsed="0.006087"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.406415" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:43.406491" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:43.406143" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:43.407103" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:43.406799" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:43.406583" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:43.406565" 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-10T00:46:43.407427" 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-10T00:46:43.407596" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:43.407662" 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-10T00:46:43.397026" elapsed="0.010742">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:43.396758" elapsed="0.011080">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:43.396616" elapsed="0.011296">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:43.396197" 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-10T00:46:43.408279" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:43.368969" elapsed="0.039427">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:44.432571" elapsed="0.000283"/>
</kw>
<msg time="2026-04-10T00:46:44.432925" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:44.431918" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:44.431416" elapsed="0.001655"/>
</kw>
<msg time="2026-04-10T00:46:44.433119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:44.423303" elapsed="0.009862"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:44.422889" elapsed="0.010353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.433703" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:44.433437" 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-10T00:46:44.438866" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:44.438465" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.439348" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:44.439059" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:44.439424" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:44.439584" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:44.438096" elapsed="0.001512"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:44.439758" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.440425" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:44.440090" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.440908" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:44.440606" elapsed="0.000329"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.441325" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:44.441085" 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-10T00:46:44.441752" 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-10T00:46:44.442027" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:44.441878" 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-10T00:46:44.442249" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:44.442109" 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-10T00:46:44.442464" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:44.442326" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:44.441855" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:44.441584" elapsed="0.000980"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:44.441398" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:44.442705" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:44.442936" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:44.442984" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:44.437368" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.443457" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:44.443535" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:44.443177" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:44.444333" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:44.443864" elapsed="0.000548">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:44.443629" elapsed="0.000852">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:44.443610" 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-10T00:46:44.444666" 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-10T00:46:44.444876" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:44.444946" 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-10T00:46:44.434800" elapsed="0.010269">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:44.434561" elapsed="0.010578">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:44.434417" elapsed="0.010778">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:44.434000" elapsed="0.011286">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:44.445517" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:44.409276" elapsed="0.036357">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:45.470479" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:46:45.470788" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:45.469822" elapsed="0.001043"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:45.469362" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:46:45.470991" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:45.461338" elapsed="0.009697"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:45.460930" elapsed="0.010180"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.471551" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:45.471295" 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-10T00:46:45.476593" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:45.476205" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.477090" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:45.476781" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:45.477165" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:45.477401" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:45.475803" 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-10T00:46:45.477582" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.478452" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:45.477918" elapsed="0.000562"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.478900" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:45.478640" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.479318" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:45.479077" 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-10T00:46:45.479742" 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-10T00:46:45.480042" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:45.479865" 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-10T00:46:45.480264" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:45.480124" 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-10T00:46:45.480483" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:45.480343" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:45.479831" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:45.479576" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:45.479393" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:45.480649" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:45.480868" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:45.480916" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:45.475092" elapsed="0.005849"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.481388" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:45.481467" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:45.481114" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:45.482076" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:45.481779" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:45.481561" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:45.481543" 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-10T00:46:45.482397" 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-10T00:46:45.482568" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:45.482635" 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-10T00:46:45.472609" elapsed="0.010134">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:45.472378" elapsed="0.010436">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:45.472239" elapsed="0.010651">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:45.471820" elapsed="0.011163">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:45.483214" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:45.446483" elapsed="0.036848">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:46.509354" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:46:46.509679" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:46.508659" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:46.508187" elapsed="0.001640"/>
</kw>
<msg time="2026-04-10T00:46:46.509894" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:46.499991" elapsed="0.009952"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:46.499517" elapsed="0.010505"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.510491" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:46.510222" 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-10T00:46:46.516033" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:46.515598" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.516548" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:46.516226" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:46.516626" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:46.516789" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:46.515197" 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-10T00:46:46.516985" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.517676" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:46.517312" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.518153" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:46.517878" elapsed="0.000303"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.518608" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:46.518348" 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-10T00:46:46.519058" 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-10T00:46:46.519405" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:46.519244" 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-10T00:46:46.519633" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:46.519489" 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-10T00:46:46.519868" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:46.519711" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:46.519222" elapsed="0.000724"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:46.518886" elapsed="0.001085"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:46.518685" elapsed="0.001312"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:46.520037" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:46.520246" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:46.520296" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:46.514438" elapsed="0.005883"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.520868" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:46.520954" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:46.520559" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:46.521583" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:46.521286" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:46.521055" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:46.521034" 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-10T00:46:46.521930" 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-10T00:46:46.522108" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:46.522178" 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-10T00:46:46.511613" elapsed="0.010681">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:46.511361" elapsed="0.011008">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:46.511213" elapsed="0.011214">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:46.510773" elapsed="0.011753">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:46.522764" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:46.484215" elapsed="0.038691">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:47.548628" elapsed="0.000272"/>
</kw>
<msg time="2026-04-10T00:46:47.548971" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:47.547906" elapsed="0.001136"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:47.547396" elapsed="0.001729"/>
</kw>
<msg time="2026-04-10T00:46:47.549173" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:47.538884" elapsed="0.010338"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:47.538098" elapsed="0.011202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.549787" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:47.549507" 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-10T00:46:47.555004" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:47.554585" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.555497" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:47.555202" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:47.555572" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:47.555737" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:47.554181" 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-10T00:46:47.555931" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.556614" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:47.556275" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.557136" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:47.556888" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.557555" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:47.557314" 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-10T00:46:47.557999" 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-10T00:46:47.558261" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:47.558116" elapsed="0.000249"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:47.558535" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:47.558392" 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-10T00:46:47.558751" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:47.558611" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:47.558096" elapsed="0.000730"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:47.557816" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:47.557630" elapsed="0.001273"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:47.558944" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:47.559189" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:47.559255" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:47.553444" elapsed="0.005844"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.559926" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:47.560035" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:47.559525" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:47.561161" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:47.560715" elapsed="0.000545">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:47.560171" elapsed="0.001181">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:47.560145" elapsed="0.001253">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:47.561610" 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-10T00:46:47.561870" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:47.561974" 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-10T00:46:47.550970" elapsed="0.011157">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:47.550711" elapsed="0.011512">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:47.550566" elapsed="0.011753">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:47.550090" elapsed="0.012360">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:47.562771" elapsed="0.000033"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:47.523730" elapsed="0.039225">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:48.588191" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:46:48.588507" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:48.587527" elapsed="0.001043"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:48.587071" elapsed="0.001669"/>
</kw>
<msg time="2026-04-10T00:46:48.588975" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:48.578886" elapsed="0.010166"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:48.578403" elapsed="0.010777"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.589646" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:48.589372" 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-10T00:46:48.594979" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:48.594577" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.595453" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:48.595166" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:48.595527" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:48.595683" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:48.594197" elapsed="0.001511"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:48.595874" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.596527" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:48.596191" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.596967" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:48.596708" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.597381" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:48.597142" 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-10T00:46:48.597834" 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-10T00:46:48.598102" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:48.597958" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:48.598321" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:48.598182" 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-10T00:46:48.598537" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:48.598399" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:48.597939" elapsed="0.000673"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:48.597667" elapsed="0.000968"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:48.597456" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:48.598701" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:48.598916" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:48.598964" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:48.593454" elapsed="0.005534"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.599426" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:48.599503" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:48.599158" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:48.600098" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:48.599808" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:48.599595" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:48.599577" 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-10T00:46:48.600459" 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-10T00:46:48.600631" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:48.600697" 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-10T00:46:48.590807" elapsed="0.009997">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:48.590574" elapsed="0.010316">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:48.590431" elapsed="0.010515">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:48.589933" elapsed="0.011100">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:48.601262" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:48.563949" elapsed="0.037427">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:49.626719" elapsed="0.000251"/>
</kw>
<msg time="2026-04-10T00:46:49.627036" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:49.626060" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:49.625583" elapsed="0.001595"/>
</kw>
<msg time="2026-04-10T00:46:49.627223" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:49.617593" elapsed="0.009676"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:49.617183" elapsed="0.010162"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.627792" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:49.627535" 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-10T00:46:49.632893" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:49.632473" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.633366" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:49.633079" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:49.633438" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:49.633596" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:49.632103" 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-10T00:46:49.633770" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.634430" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:49.634099" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.634863" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:49.634611" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.635267" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:49.635034" 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-10T00:46:49.635681" 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-10T00:46:49.636048" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:49.635901" 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-10T00:46:49.636266" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:49.636128" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:49.636482" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:49.636343" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:49.635880" elapsed="0.000675"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:49.635517" elapsed="0.001063"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:49.635339" elapsed="0.001266"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:49.636644" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:49.636888" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:49.636937" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:49.631372" elapsed="0.005588"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.637397" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:49.637473" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:49.637129" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:49.639700" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:49.639416" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:49.639187" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:49.637546" elapsed="0.002337">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:49.640038" 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-10T00:46:49.640209" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:49.640276" 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-10T00:46:49.628893" elapsed="0.011517">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:49.628619" elapsed="0.011881">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:49.628480" elapsed="0.012085">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:49.628085" elapsed="0.012592">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:49.640952" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:49.602278" elapsed="0.038791">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:50.666798" elapsed="0.000269"/>
</kw>
<msg time="2026-04-10T00:46:50.667136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:50.666115" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:50.665631" elapsed="0.001702"/>
</kw>
<msg time="2026-04-10T00:46:50.667394" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:50.657521" elapsed="0.009925"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:50.657062" elapsed="0.010544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.668124" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:50.667808" elapsed="0.000364"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.673659" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:50.673191" elapsed="0.000497"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.674173" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:50.673868" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:50.674265" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:46:50.674444" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:50.672756" elapsed="0.001715"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:50.674627" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.675343" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:50.674967" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.675816" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:50.675551" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.676335" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:50.676075" 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-10T00:46:50.676762" 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-10T00:46:50.677037" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:50.676890" 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-10T00:46:50.677255" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:50.677118" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:50.677469" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:50.677331" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:50.676869" elapsed="0.000674"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:50.676594" elapsed="0.000973"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:50.676411" elapsed="0.001182"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:50.677633" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:50.677836" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:50.677900" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:50.672023" elapsed="0.005902"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.678393" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:50.678473" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:50.678095" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:50.679082" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:50.678783" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:50.678566" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:50.678548" 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-10T00:46:50.679398" 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-10T00:46:50.679566" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:50.679630" 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-10T00:46:50.669234" elapsed="0.010541">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:50.668985" elapsed="0.010876">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:50.668820" 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-10T00:46:50.668412" elapsed="0.011609">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:50.680251" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:50.641952" elapsed="0.038413">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:51.707353" elapsed="0.000320"/>
</kw>
<msg time="2026-04-10T00:46:51.707756" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:51.706393" elapsed="0.001443"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:51.705683" elapsed="0.002289"/>
</kw>
<msg time="2026-04-10T00:46:51.708044" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:51.697015" elapsed="0.011097"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:51.696558" elapsed="0.011665"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.708872" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:51.708486" elapsed="0.000455"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.716129" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:51.715561" elapsed="0.000605"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.716800" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:51.716390" elapsed="0.000444"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:51.716918" elapsed="0.000046"/>
</return>
<msg time="2026-04-10T00:46:51.717146" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:51.714986" elapsed="0.002196"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:51.717402" elapsed="0.000217"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.718326" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:51.717840" elapsed="0.000522"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.718927" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:51.718575" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.719514" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:51.719169" 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-10T00:46:51.720110" 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-10T00:46:51.720457" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:51.720257" 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-10T00:46:51.720749" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:51.720563" elapsed="0.000367"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:51.721175" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:51.720966" elapsed="0.000282"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:51.720229" elapsed="0.001055"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:51.719882" elapsed="0.001433"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:51.719614" elapsed="0.001728"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:51.721384" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:51.721594" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:51.721641" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:51.713909" elapsed="0.007756"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.722169" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:51.722248" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:51.721842" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:51.723100" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:51.722568" elapsed="0.000609">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:51.722345" elapsed="0.000921">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:51.722326" elapsed="0.000972">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:51.723454" 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-10T00:46:51.723628" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:51.723694" 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-10T00:46:51.710320" elapsed="0.013485">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:51.710005" elapsed="0.013885">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:51.709797" elapsed="0.014150">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:51.709255" elapsed="0.014781">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:51.724269" elapsed="0.000028"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:51.681199" elapsed="0.043191">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:52.752615" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:46:52.752942" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:52.751969" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:52.751499" elapsed="0.001585"/>
</kw>
<msg time="2026-04-10T00:46:52.753131" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:52.741778" elapsed="0.011397"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:52.741204" elapsed="0.012044"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.753697" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:52.753442" 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-10T00:46:52.758952" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:52.758493" elapsed="0.000496"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.759461" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:52.759152" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:52.759536" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:52.759697" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:52.757999" elapsed="0.001723"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:52.759889" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.760545" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:52.760208" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.761181" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:52.760725" elapsed="0.000483"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.761599" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:52.761357" 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-10T00:46:52.762038" 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-10T00:46:52.762293" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:52.762148" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:52.762535" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:52.762375" 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-10T00:46:52.762756" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:52.762615" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:52.762129" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:52.761871" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:52.761673" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:52.762936" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:52.763137" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:52.763183" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:52.757265" elapsed="0.005941"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.763648" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:52.763724" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:52.763374" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:52.764326" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:52.764047" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:52.763816" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:52.763798" 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-10T00:46:52.764650" 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-10T00:46:52.764820" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:52.764902" 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-10T00:46:52.754768" elapsed="0.010243">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:52.754534" elapsed="0.010546">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:52.754381" elapsed="0.010755">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:52.753986" elapsed="0.011241">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:52.765503" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:52.725214" elapsed="0.040407">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:53.789026" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:46:53.789329" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:53.788357" elapsed="0.001033"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:53.787896" elapsed="0.001574"/>
</kw>
<msg time="2026-04-10T00:46:53.789517" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:53.779859" elapsed="0.009703"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:53.779438" elapsed="0.010198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.790115" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:53.789855" 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-10T00:46:53.795430" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:53.795037" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.795929" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:53.795620" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:53.796007" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:53.796166" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:53.794649" 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-10T00:46:53.796343" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.797005" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:53.796654" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.797426" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:53.797186" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.797895" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:53.797599" 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-10T00:46:53.798315" 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-10T00:46:53.798566" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:53.798422" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:53.798782" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:53.798645" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:53.799013" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:53.798874" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:53.798403" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:53.798150" elapsed="0.000961"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:53.797970" elapsed="0.001166"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:53.799275" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:46:53.799483" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:53.799530" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:53.793923" elapsed="0.005631"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.800016" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:53.800094" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:53.799727" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:53.800681" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:53.800403" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:53.800189" elapsed="0.000632">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:53.800170" 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-10T00:46:53.801018" 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-10T00:46:53.801187" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:53.801251" 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-10T00:46:53.791175" elapsed="0.010185">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:53.790942" elapsed="0.010488">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:53.790787" elapsed="0.010696">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:53.790390" elapsed="0.011183">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:53.801824" elapsed="0.000039"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:53.766500" elapsed="0.035457">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:54.828892" elapsed="0.000270"/>
</kw>
<msg time="2026-04-10T00:46:54.829234" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:54.828219" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:54.827725" elapsed="0.001655"/>
</kw>
<msg time="2026-04-10T00:46:54.829425" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:54.818824" elapsed="0.010646"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:54.818239" elapsed="0.011304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.830009" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:54.829733" 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-10T00:46:54.835684" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:54.835148" elapsed="0.000575"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.836369" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:54.835967" elapsed="0.000438"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:54.836471" elapsed="0.000044"/>
</return>
<msg time="2026-04-10T00:46:54.836788" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:54.834615" elapsed="0.002208"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:54.837096" elapsed="0.000223"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.837872" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:54.837519" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.838293" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:54.838055" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.838699" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:54.838464" 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-10T00:46:54.839135" 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-10T00:46:54.839389" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:54.839245" 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-10T00:46:54.839611" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:54.839473" 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-10T00:46:54.839828" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:54.839688" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:54.839225" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:54.838967" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:54.838771" elapsed="0.001200"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:54.840012" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:54.840214" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:54.840260" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:54.833600" elapsed="0.006683"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.840728" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:54.840805" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:54.840454" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:54.841603" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:54.841317" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:54.840914" elapsed="0.000827">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:54.840895" elapsed="0.000878">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:54.841941" 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-10T00:46:54.842114" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:54.842181" 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-10T00:46:54.831062" elapsed="0.011228">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:54.830814" elapsed="0.011546">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:54.830674" 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-10T00:46:54.830279" elapsed="0.012228">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:54.842739" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:54.802822" elapsed="0.040047">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:55.868998" elapsed="0.000277"/>
</kw>
<msg time="2026-04-10T00:46:55.869360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:55.868326" elapsed="0.001113"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:55.867828" elapsed="0.001699"/>
</kw>
<msg time="2026-04-10T00:46:55.869575" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:55.859254" 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-10T00:46:55.858501" elapsed="0.011194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.870177" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:55.869917" 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-10T00:46:55.875595" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:55.875198" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.876089" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:55.875782" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:55.876166" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:46:55.876350" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:55.874808" 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-10T00:46:55.876529" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.877206" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:55.876864" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.877626" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:55.877387" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.878052" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:55.877797" 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-10T00:46:55.878471" 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-10T00:46:55.878738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:55.878589" 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-10T00:46:55.878993" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:55.878819" elapsed="0.000229"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:55.879257" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:55.879071" elapsed="0.000238"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:55.878568" elapsed="0.000764"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:55.878303" elapsed="0.001055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:55.878123" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:55.879428" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:46:55.879632" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:55.879677" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:55.874095" elapsed="0.005605"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.880247" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:55.880338" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:55.879968" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:55.880951" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:55.880643" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:55.880429" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:55.880411" 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-10T00:46:55.881286" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:55.881456" elapsed="0.000019"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:55.881524" 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-10T00:46:55.871329" elapsed="0.010307">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:55.871063" elapsed="0.010642">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:55.870896" elapsed="0.010864">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:55.870460" elapsed="0.011405">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:55.882100" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:55.843762" elapsed="0.038455">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:56.907309" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:46:56.907649" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:56.906619" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:56.906144" elapsed="0.001658"/>
</kw>
<msg time="2026-04-10T00:46:56.907870" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:56.897899" elapsed="0.010023"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:56.897407" elapsed="0.010592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.908454" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:56.908191" 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-10T00:46:56.913641" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:56.913237" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.914156" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:56.913831" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:56.914231" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:46:56.914393" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:56.912838" elapsed="0.001580"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:56.914568" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.915260" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:56.914905" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.915875" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:56.915588" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.916328" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:56.916076" 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-10T00:46:56.916754" 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-10T00:46:56.917041" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:56.916883" 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-10T00:46:56.917274" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:56.917130" 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-10T00:46:56.917496" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:56.917352" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:56.916861" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:56.916586" elapsed="0.001012"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:56.916403" elapsed="0.001220"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:56.917664" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:56.917883" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:56.917932" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:56.912113" elapsed="0.005842"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.918422" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:56.918504" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:56.918141" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:56.919315" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:56.919013" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:56.918599" elapsed="0.000862">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:56.918580" elapsed="0.000911">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:56.919667" 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-10T00:46:56.919858" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:56.919927" 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-10T00:46:56.909542" elapsed="0.010497">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:56.909304" elapsed="0.010819">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:56.909160" 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-10T00:46:56.908731" elapsed="0.011540">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:56.920506" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:56.883083" elapsed="0.037540">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:57.946423" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:46:57.946751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:57.945761" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:57.945299" elapsed="0.001750"/>
</kw>
<msg time="2026-04-10T00:46:57.947097" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:57.936295" elapsed="0.010848"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:57.935714" elapsed="0.011503"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.947684" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:57.947407" 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-10T00:46:57.952938" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:57.952535" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.953409" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:57.953125" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:57.953483" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:46:57.953640" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:57.952163" 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-10T00:46:57.953814" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.954476" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:57.954141" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.954939" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:57.954657" elapsed="0.000309"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.955352" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:57.955113" 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-10T00:46:57.955779" 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-10T00:46:57.956057" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:57.955904" elapsed="0.000238"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:57.956317" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:57.956170" 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-10T00:46:57.956565" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:57.956395" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:57.955884" elapsed="0.000765"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:57.955611" elapsed="0.001062"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:57.955424" elapsed="0.001275"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:57.956738" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:46:57.956958" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:57.957004" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:57.951430" elapsed="0.005598"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.957469" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:57.957546" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:57.957199" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:57.958188" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:57.957903" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:57.957658" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:57.957629" 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-10T00:46:57.958555" 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-10T00:46:57.958728" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:57.958794" 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-10T00:46:57.948744" elapsed="0.010190">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:57.948508" elapsed="0.010499">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:57.948367" elapsed="0.010694">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:57.947975" elapsed="0.011176">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:57.959382" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:57.921436" elapsed="0.038062">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:46:58.989554" elapsed="0.000335"/>
</kw>
<msg time="2026-04-10T00:46:58.989976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:58.988665" elapsed="0.001389"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:46:58.988112" elapsed="0.002060"/>
</kw>
<msg time="2026-04-10T00:46:58.990235" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:46:58.978677" 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-10T00:46:58.978124" elapsed="0.012295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:46:58.990989" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:46:58.990649" 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-10T00:46:58.996932" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:58.996458" elapsed="0.000515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:58.997513" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:58.997175" elapsed="0.000368"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:46:58.997604" elapsed="0.000044"/>
</return>
<msg time="2026-04-10T00:46:58.997819" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:46:58.996020" elapsed="0.001843"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:46:58.998056" elapsed="0.000225"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:46:58.998869" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:46:58.998477" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:58.999390" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:58.999089" elapsed="0.000332"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:46:58.999907" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:46:58.999598" 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-10T00:46:59.000467" 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-10T00:46:59.000885" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:59.000685" 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-10T00:46:59.001194" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:59.001001" 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-10T00:46:59.001459" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:46:59.001291" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:46:59.000659" elapsed="0.000887"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:46:59.000260" elapsed="0.001315"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:59.000009" elapsed="0.001596"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:46:59.001653" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:46:59.001907" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:46:59.001962" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:46:58.995251" elapsed="0.006739"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:46:59.002598" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:46:59.002684" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:46:59.002284" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:46:59.003670" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:46:59.003095" elapsed="0.000671">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:46:59.002810" elapsed="0.001061">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:46:59.002783" elapsed="0.001125">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:59.004100" 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-10T00:46:59.004308" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:46:59.004385" 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-10T00:46:58.992247" elapsed="0.012263">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:46:58.991955" elapsed="0.012633">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:46:58.991773" elapsed="0.012871">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:46:58.991321" elapsed="0.013412">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:46:59.005051" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:58.960380" elapsed="0.044816">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:00.029053" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:47:00.029378" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:00.028339" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:00.027782" elapsed="0.001796"/>
</kw>
<msg time="2026-04-10T00:47:00.029628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:00.019676" elapsed="0.009999"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:00.019256" elapsed="0.010599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.030314" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:00.030050" 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-10T00:47:00.035416" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:00.035019" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.035908" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:00.035602" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:00.035985" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:00.036146" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:00.034627" 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-10T00:47:00.036324" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.036994" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:00.036642" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.037813" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:00.037177" elapsed="0.000681"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.038263" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:00.038014" 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-10T00:47:00.038698" 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-10T00:47:00.038978" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:00.038810" 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-10T00:47:00.039205" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:00.039063" 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-10T00:47:00.039473" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:00.039304" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:00.038790" elapsed="0.000762"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:00.038527" elapsed="0.001050"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:00.038340" elapsed="0.001263"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:00.039651" elapsed="0.000037"/>
</return>
<msg time="2026-04-10T00:47:00.039892" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:00.039940" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:00.033910" elapsed="0.006053"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.040414" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:00.040491" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:00.040134" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:00.041097" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:00.040799" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:00.040584" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:00.040566" 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-10T00:47:00.041424" 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-10T00:47:00.041612" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:00.041678" 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-10T00:47:00.031382" elapsed="0.010449">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:00.031146" elapsed="0.010775">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:00.031002" elapsed="0.010974">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:00.030590" elapsed="0.011477">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:00.042299" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:00.006119" elapsed="0.036297">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:01.069104" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:47:01.069422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:01.068404" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:01.067933" elapsed="0.001634"/>
</kw>
<msg time="2026-04-10T00:47:01.069614" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:01.058872" elapsed="0.010787"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:01.058270" elapsed="0.011465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.070207" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:01.069942" 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-10T00:47:01.076522" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:01.075963" elapsed="0.000598"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.077263" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:01.076801" elapsed="0.000502"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:01.077373" elapsed="0.000044"/>
</return>
<msg time="2026-04-10T00:47:01.077617" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:01.075410" elapsed="0.002246"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:01.077896" elapsed="0.000226"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.079033" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:01.078369" elapsed="0.000716"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.079827" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:01.079381" elapsed="0.000518"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.080536" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:01.080170" 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-10T00:47:01.081311" 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-10T00:47:01.081674" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:01.081469" elapsed="0.000282"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:01.081949" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:01.081785" 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-10T00:47:01.082278" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:01.082102" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:01.081442" elapsed="0.000924"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:01.081018" elapsed="0.001373"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:01.080644" elapsed="0.001774"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:01.082460" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:01.082669" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:01.082717" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:01.074321" elapsed="0.008421"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.083219" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:01.083299" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:01.082935" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:01.083918" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:01.083617" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:01.083396" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:01.083377" 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-10T00:47:01.084244" 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-10T00:47:01.084417" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:01.084484" 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-10T00:47:01.071274" elapsed="0.013321">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:01.071040" elapsed="0.013626">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:01.070898" elapsed="0.013824">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:01.070484" elapsed="0.014388">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:01.085130" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:01.043254" elapsed="0.042005">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:02.110910" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:47:02.111214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:02.110237" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:02.109760" elapsed="0.001595"/>
</kw>
<msg time="2026-04-10T00:47:02.111401" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:02.101589" elapsed="0.009858"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:02.101179" elapsed="0.010344"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.111991" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:02.111711" 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-10T00:47:02.117363" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:02.116966" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.117863" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:02.117553" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:02.117940" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:02.118100" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:02.116312" 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-10T00:47:02.118278" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.118953" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:02.118598" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.119384" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:02.119139" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.119794" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:02.119557" 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-10T00:47:02.120264" 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-10T00:47:02.120517" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:02.120373" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:02.120735" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:02.120597" 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-10T00:47:02.120972" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:02.120813" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:02.120354" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:02.120067" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:02.119883" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:02.121136" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:02.121335" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:02.121381" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:02.115558" elapsed="0.005846"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.121840" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:02.121934" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:02.121572" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:02.122711" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:02.122241" elapsed="0.000543">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:02.122026" elapsed="0.000843">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:02.122007" 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-10T00:47:02.123057" 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-10T00:47:02.123231" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:02.123297" 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-10T00:47:02.113060" elapsed="0.010343">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:02.112817" elapsed="0.010655">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:02.112679" elapsed="0.010847">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:02.112286" elapsed="0.011330">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:02.123901" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:02.086084" elapsed="0.037933">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:03.150451" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:47:03.150767" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:03.149779" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:03.149301" elapsed="0.001642"/>
</kw>
<msg time="2026-04-10T00:47:03.150990" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:03.141015" elapsed="0.010021"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:03.140572" elapsed="0.010539"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.151628" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:03.151306" elapsed="0.000371"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.157109" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:03.156696" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.157590" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:03.157298" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:03.157666" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:03.157827" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:03.156319" 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-10T00:47:03.158026" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.158903" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:03.158345" elapsed="0.000586"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.159333" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:03.159089" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.159831" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:03.159572" 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-10T00:47:03.160281" 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-10T00:47:03.160539" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:03.160393" 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-10T00:47:03.160757" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:03.160619" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:03.160996" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:03.160833" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:03.160374" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:03.160110" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:03.159924" elapsed="0.001198"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:03.161234" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:03.161440" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:03.161487" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:03.155581" elapsed="0.005931"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.161972" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:03.162050" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:03.161683" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:03.162639" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:03.162359" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:03.162145" elapsed="0.000631">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:03.162127" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:03.162976" 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-10T00:47:03.163149" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:03.163215" 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-10T00:47:03.152727" elapsed="0.010597">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:03.152482" elapsed="0.010912">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:03.152339" elapsed="0.011123">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:03.151941" elapsed="0.011614">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:03.163786" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:03.124915" elapsed="0.039005">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:04.189240" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:47:04.189540" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:04.188579" elapsed="0.001022"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:04.188110" elapsed="0.001568"/>
</kw>
<msg time="2026-04-10T00:47:04.189724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:04.180061" elapsed="0.009707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:04.179639" elapsed="0.010219"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.190304" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:04.190047" 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-10T00:47:04.195834" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:04.195442" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.196326" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:04.196036" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:04.196401" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:04.196636" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:04.195016" 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-10T00:47:04.196815" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.197485" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:04.197149" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.197932" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:04.197668" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.198342" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:04.198104" 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-10T00:47:04.198768" elapsed="0.000071"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:04.199094" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:04.198942" 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-10T00:47:04.199312" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:04.199174" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:04.199527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:04.199388" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:04.198921" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:04.198604" elapsed="0.001020"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:04.198422" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:04.199689" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:04.199906" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:04.199952" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:04.194110" elapsed="0.005866"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.200414" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:04.200490" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:04.200145" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:04.201089" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:04.200796" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:04.200583" elapsed="0.000643">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:04.200565" 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-10T00:47:04.201407" 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-10T00:47:04.201576" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:04.201641" 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-10T00:47:04.191390" elapsed="0.010357">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:04.191158" elapsed="0.010657">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:04.191020" elapsed="0.010865">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:04.190576" 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-10T00:47:04.202205" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:04.164706" elapsed="0.037612">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:05.227079" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:47:05.227393" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:05.226415" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:05.225946" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:47:05.227582" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:05.215920" elapsed="0.011706"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:05.215339" elapsed="0.012359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.228166" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:05.227904" 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-10T00:47:05.233217" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:05.232785" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.233692" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:05.233403" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:05.233765" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:05.233938" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:05.232417" 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-10T00:47:05.234113" elapsed="0.000184"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.234792" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:05.234455" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.235229" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:05.234989" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.235636" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:05.235400" 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-10T00:47:05.236067" 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-10T00:47:05.236318" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:05.236174" 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-10T00:47:05.236537" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:05.236398" 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-10T00:47:05.236753" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:05.236614" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:05.236155" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:05.235902" elapsed="0.000962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:05.235707" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:05.236931" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:05.237131" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:05.237178" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:05.231692" elapsed="0.005510"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.237709" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:05.237788" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:05.237437" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:05.238583" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:05.238301" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:05.237898" elapsed="0.000821">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:05.237879" 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-10T00:47:05.238917" 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-10T00:47:05.239090" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:05.239157" 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-10T00:47:05.229218" elapsed="0.010046">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:05.228988" elapsed="0.010346">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:05.228824" elapsed="0.010566">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:05.228434" elapsed="0.011047">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:05.239710" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:05.203010" elapsed="0.036816">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:06.267493" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:47:06.267807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:06.266837" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:06.266378" elapsed="0.001592"/>
</kw>
<msg time="2026-04-10T00:47:06.268017" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:06.256712" elapsed="0.011349"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:06.256141" elapsed="0.011993"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.268577" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:06.268322" 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-10T00:47:06.275362" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:06.274797" elapsed="0.000604"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.276047" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:06.275620" elapsed="0.000465"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:06.276151" elapsed="0.000041"/>
</return>
<msg time="2026-04-10T00:47:06.276368" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:06.274283" elapsed="0.002119"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:06.276609" elapsed="0.000215"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.277563" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:06.277064" elapsed="0.000538"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.278289" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:06.277944" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.278887" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:06.278533" elapsed="0.000392"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:06.279479" 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-10T00:47:06.279826" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:06.279629" 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-10T00:47:06.280159" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:06.279960" elapsed="0.000275"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:06.280461" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:06.280267" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:06.279602" elapsed="0.000963"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:06.279248" elapsed="0.001350"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:06.278991" elapsed="0.001643"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:06.280689" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:47:06.280988" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:06.281054" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:06.273229" elapsed="0.007873"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.281775" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:06.281905" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:06.281343" elapsed="0.000597"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:06.282596" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:06.282319" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:06.282036" elapsed="0.000695">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:06.282010" 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-10T00:47:06.282930" 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-10T00:47:06.283102" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:06.283168" 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-10T00:47:06.269681" elapsed="0.013593">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:06.269397" elapsed="0.013947">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:06.269255" elapsed="0.014144">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:06.268860" elapsed="0.014629">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:06.283720" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:06.240673" elapsed="0.043162">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:07.308972" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:47:07.309277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:07.308304" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:07.307832" elapsed="0.001659"/>
</kw>
<msg time="2026-04-10T00:47:07.309538" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:07.299344" elapsed="0.010239"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:07.298760" elapsed="0.010898"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.310122" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:07.309861" 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-10T00:47:07.315164" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:07.314755" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.315641" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:07.315350" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:07.315714" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:07.315887" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:07.314387" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:07.316065" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.316716" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:07.316379" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.317171" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:07.316928" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.317578" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:07.317342" 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-10T00:47:07.318064" 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-10T00:47:07.318325" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:07.318176" 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-10T00:47:07.318542" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:07.318405" elapsed="0.000189"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:07.318754" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:07.318617" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:07.318157" elapsed="0.000669"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:07.317889" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:07.317651" elapsed="0.001239"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:07.318930" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:07.319128" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:07.319174" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:07.313652" elapsed="0.005546"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.319635" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:07.319719" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:07.319365" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:07.322049" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:07.321745" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:07.321514" elapsed="0.000720">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:07.319803" elapsed="0.002465">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:07.322421" 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-10T00:47:07.322592" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:07.322658" 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-10T00:47:07.311176" elapsed="0.011588">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:07.310943" elapsed="0.011891">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:07.310788" elapsed="0.012118">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:07.310395" elapsed="0.012600">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:07.323226" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:07.285082" elapsed="0.038259">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:08.347595" elapsed="0.000273"/>
</kw>
<msg time="2026-04-10T00:47:08.347939" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:08.346939" elapsed="0.001067"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:08.346449" elapsed="0.001636"/>
</kw>
<msg time="2026-04-10T00:47:08.348132" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:08.338306" elapsed="0.009870"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:08.337887" elapsed="0.010384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.348736" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:08.348466" 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-10T00:47:08.354095" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:08.353673" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.354580" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:08.354285" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:08.354656" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:08.354835" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:08.353294" 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-10T00:47:08.355036" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.355706" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:08.355357" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.356171" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:08.355918" elapsed="0.000306"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.356627" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:08.356378" 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-10T00:47:08.357081" 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-10T00:47:08.357416" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:08.357265" 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-10T00:47:08.357641" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:08.357498" 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-10T00:47:08.357885" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:08.357720" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:08.357245" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:08.356909" elapsed="0.001081"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:08.356701" elapsed="0.001315"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:08.358055" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:08.358261" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:08.358308" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:08.352538" elapsed="0.005795"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.358784" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:08.358891" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:08.358507" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:08.359490" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:08.359208" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:08.358989" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:08.358970" 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-10T00:47:08.359817" elapsed="0.000044"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:08.360019" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:08.360087" 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-10T00:47:08.349812" elapsed="0.010398">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:08.349567" elapsed="0.010717">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:08.349426" elapsed="0.010915">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:08.349030" elapsed="0.011404">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:08.360673" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:08.324196" elapsed="0.036597">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:09.389619" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:47:09.389954" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:09.388969" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:09.388449" elapsed="0.001650"/>
</kw>
<msg time="2026-04-10T00:47:09.390150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:09.378460" elapsed="0.011748"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:09.377742" elapsed="0.012655"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.390885" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:09.390593" 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-10T00:47:09.397670" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:09.397115" elapsed="0.000595"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.398369" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:09.397958" elapsed="0.000448"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:09.398474" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:47:09.398699" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:09.396573" elapsed="0.002162"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:09.398970" elapsed="0.000256"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.400012" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:09.399460" elapsed="0.000595"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.400830" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:09.400286" elapsed="0.000637"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.401887" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:09.401254" elapsed="0.000698"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:09.402833" elapsed="0.000086"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:09.403436" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:09.403107" elapsed="0.000874"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:09.404362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:09.404076" elapsed="0.000344"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:09.404636" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:09.404444" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:09.403064" elapsed="0.001652"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:09.402463" elapsed="0.002278"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:09.402057" elapsed="0.002709"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:09.404805" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:09.405025" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:09.405071" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:09.395455" elapsed="0.009640"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.405568" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:09.405647" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:09.405281" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:09.406507" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:09.405976" elapsed="0.000608">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:09.405741" elapsed="0.000914">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:09.405723" 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-10T00:47:09.406878" 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-10T00:47:09.407056" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:09.407123" 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-10T00:47:09.392053" elapsed="0.015222">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:09.391794" elapsed="0.015557">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:09.391625" elapsed="0.015783">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:09.391165" elapsed="0.016333">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:09.407757" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:09.361671" elapsed="0.046219">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:10.433901" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:47:10.434212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:10.433238" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:10.432757" elapsed="0.001597"/>
</kw>
<msg time="2026-04-10T00:47:10.434401" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:10.424590" elapsed="0.009856"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:10.424095" elapsed="0.010425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.435000" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:10.434712" 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-10T00:47:10.440050" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:10.439644" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.440529" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:10.440237" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:10.440604" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:10.440762" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:10.439273" 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-10T00:47:10.440956" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.441611" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:10.441272" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.442259" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:10.441794" elapsed="0.000493"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.442679" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:10.442437" 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-10T00:47:10.443130" 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-10T00:47:10.443385" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:10.443239" 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-10T00:47:10.443605" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:10.443465" elapsed="0.000269"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:10.443920" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:10.443760" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:10.443219" elapsed="0.000778"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:10.442962" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:10.442752" elapsed="0.001295"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:10.444087" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:10.444290" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:10.444338" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:10.438524" elapsed="0.005838"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.444805" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:10.444903" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:10.444534" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:10.445491" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:10.445214" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:10.444999" elapsed="0.000629">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:10.444980" 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-10T00:47:10.445811" 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-10T00:47:10.445999" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:10.446066" 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-10T00:47:10.436055" elapsed="0.010118">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:10.435808" elapsed="0.010434">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:10.435668" elapsed="0.010629">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:10.435273" elapsed="0.011113">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:10.446624" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:10.408659" elapsed="0.038081">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:11.470515" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:47:11.470833" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:11.469810" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:11.469344" elapsed="0.001652"/>
</kw>
<msg time="2026-04-10T00:47:11.471043" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:11.461176" elapsed="0.009912"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:11.460709" elapsed="0.010469"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.471693" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:11.471421" 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-10T00:47:11.479560" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:11.478699" elapsed="0.000891"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.480078" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:11.479755" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:11.480157" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:47:11.480325" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:11.477585" elapsed="0.002766"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:11.480515" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.481249" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:11.480867" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.481700" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:11.481445" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.482152" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:11.481897" 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-10T00:47:11.482610" 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-10T00:47:11.482887" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:11.482722" 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-10T00:47:11.483112" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:11.482970" 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-10T00:47:11.483337" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:11.483193" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:11.482701" elapsed="0.000729"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:11.482437" elapsed="0.001019"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:11.482228" elapsed="0.001254"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:11.483523" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:11.483731" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:11.483780" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:11.475890" elapsed="0.007915"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.484280" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:11.484361" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:11.483999" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:11.484980" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:11.484679" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:11.484459" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:11.484440" 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-10T00:47:11.485317" 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-10T00:47:11.485497" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:11.485566" 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-10T00:47:11.472818" elapsed="0.012859">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:11.472573" elapsed="0.013175">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:11.472427" elapsed="0.013378">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:11.471989" elapsed="0.013927">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:11.486202" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:11.447552" elapsed="0.038795">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:12.512652" elapsed="0.000317"/>
</kw>
<msg time="2026-04-10T00:47:12.513055" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:12.511798" elapsed="0.001338"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:12.511191" elapsed="0.002047"/>
</kw>
<msg time="2026-04-10T00:47:12.513297" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:12.500199" elapsed="0.013154"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:12.499586" elapsed="0.013862"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.514072" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:12.513734" 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-10T00:47:12.520580" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:12.520081" elapsed="0.000534"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.521181" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:12.520815" elapsed="0.000398"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:12.521272" elapsed="0.000041"/>
</return>
<msg time="2026-04-10T00:47:12.521465" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:12.519602" elapsed="0.001893"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:12.521718" elapsed="0.000230"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.522463" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:12.522122" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.522901" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:12.522644" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.523307" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:12.523072" 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-10T00:47:12.523735" 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-10T00:47:12.524006" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:12.523859" 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-10T00:47:12.524224" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:12.524087" 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-10T00:47:12.524483" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:12.524329" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:12.523825" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:12.523568" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:12.523380" elapsed="0.001226"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:12.524738" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:12.524964" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:12.525011" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:12.518684" elapsed="0.006351"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.525496" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:12.525573" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:12.525207" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:12.526436" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:12.526129" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:12.525668" elapsed="0.000912">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:12.525648" 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-10T00:47:12.526761" 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-10T00:47:12.526955" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:12.527023" 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-10T00:47:12.515417" elapsed="0.011715">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:12.515122" elapsed="0.012081">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:12.514950" elapsed="0.012309">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:12.514436" elapsed="0.012923">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:12.527595" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:12.487152" elapsed="0.040561">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:13.553536" elapsed="0.000303"/>
</kw>
<msg time="2026-04-10T00:47:13.553937" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:13.552614" elapsed="0.001405"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:13.551995" elapsed="0.002126"/>
</kw>
<msg time="2026-04-10T00:47:13.554180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:13.540980" elapsed="0.013256"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:13.540396" elapsed="0.013935"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.554924" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:13.554578" 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-10T00:47:13.560581" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:13.560186" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.561146" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:13.560765" elapsed="0.000411"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:13.561224" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:13.561467" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:13.559801" elapsed="0.001691"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:13.561645" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.562325" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:13.561981" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.562750" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:13.562509" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.563177" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:13.562937" 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-10T00:47:13.563605" 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-10T00:47:13.563870" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:13.563712" 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-10T00:47:13.564090" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:13.563952" 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-10T00:47:13.564306" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:13.564167" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:13.563693" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:13.563434" elapsed="0.000970"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:13.563251" elapsed="0.001177"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:13.564468" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:13.564673" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:13.564720" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:13.559087" elapsed="0.005657"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.565276" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:13.565358" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:13.564929" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:13.565972" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:13.565676" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:13.565456" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:13.565437" 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-10T00:47:13.566489" 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-10T00:47:13.566659" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:13.566726" 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-10T00:47:13.556243" elapsed="0.010592">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:13.555949" elapsed="0.010978">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:13.555742" elapsed="0.011240">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:13.555278" elapsed="0.011796">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:13.567307" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:13.528353" elapsed="0.039068">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:14.592403" elapsed="0.000263"/>
</kw>
<msg time="2026-04-10T00:47:14.592732" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:14.591734" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:14.591267" elapsed="0.001623"/>
</kw>
<msg time="2026-04-10T00:47:14.592938" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:14.583136" elapsed="0.009848"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:14.582647" elapsed="0.010410"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.593504" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:14.593249" 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-10T00:47:14.598569" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:14.598181" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.599062" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:14.598754" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:14.599136" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:14.599295" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:14.597794" 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-10T00:47:14.599470" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.600136" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:14.599783" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.600572" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:14.600317" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.600997" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:14.600742" 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-10T00:47:14.601566" 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-10T00:47:14.601815" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:14.601672" 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-10T00:47:14.602051" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:14.601911" 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-10T00:47:14.602268" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:14.602129" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:14.601653" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:14.601251" elapsed="0.001114"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:14.601069" elapsed="0.001321"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:14.602430" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:47:14.602627" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:14.602674" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:14.597074" elapsed="0.005623"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.603231" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:14.603310" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:14.602956" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:14.604090" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:14.603790" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:14.603404" elapsed="0.000827">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:14.603385" elapsed="0.000878">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:14.604415" 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-10T00:47:14.604597" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:14.604663" 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-10T00:47:14.594564" elapsed="0.010208">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:14.594328" elapsed="0.010526">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:14.594186" elapsed="0.010726">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:14.593774" elapsed="0.011228">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:14.605231" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:14.568299" elapsed="0.037047">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:15.630304" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:47:15.630627" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:15.629594" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:15.629141" elapsed="0.001643"/>
</kw>
<msg time="2026-04-10T00:47:15.630829" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:15.621176" elapsed="0.009713"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:15.620752" elapsed="0.010211"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.631419" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:15.631165" 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-10T00:47:15.636898" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:15.636493" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.637382" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:15.637084" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:15.637456" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:15.637614" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:15.636108" 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-10T00:47:15.637788" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.638474" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:15.638117" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.639008" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:15.638749" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.639418" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:15.639179" 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-10T00:47:15.639833" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:15.640128" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:15.639983" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:15.640377" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:15.640208" 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-10T00:47:15.640643" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:15.640478" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:15.639963" elapsed="0.000763"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:15.639669" elapsed="0.001084"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:15.639490" elapsed="0.001292"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:15.640827" elapsed="0.000056"/>
</return>
<msg time="2026-04-10T00:47:15.641079" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:15.641132" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:15.635155" elapsed="0.006004"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.641667" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:15.641744" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:15.641358" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:15.642373" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:15.642093" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:15.641837" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:15.641818" 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-10T00:47:15.642693" 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-10T00:47:15.642877" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:15.642944" 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-10T00:47:15.632513" elapsed="0.010537">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:15.632267" elapsed="0.010851">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:15.632126" elapsed="0.011046">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:15.631689" elapsed="0.011572">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:15.643492" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:15.606316" elapsed="0.037290">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:16.670455" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:47:16.670781" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:16.669770" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:16.669299" elapsed="0.001760"/>
</kw>
<msg time="2026-04-10T00:47:16.671107" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:16.661209" elapsed="0.009943"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:16.660656" elapsed="0.010570"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.671710" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:16.671449" 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-10T00:47:16.676785" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:16.676388" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.677274" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:16.676987" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:16.677349" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:16.677509" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:16.676017" 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-10T00:47:16.677685" elapsed="0.000178"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.678359" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:16.678023" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.678778" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:16.678540" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.679201" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:16.678965" 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-10T00:47:16.679669" 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-10T00:47:16.679943" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:16.679780" 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-10T00:47:16.680164" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:16.680026" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:16.680378" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:16.680239" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:16.679760" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:16.679501" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:16.679306" elapsed="0.001195"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:16.680541" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:16.680740" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:16.680785" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:16.675289" elapsed="0.005519"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.681267" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:16.681343" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:16.680993" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:16.682185" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:16.681650" elapsed="0.000617">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:16.681435" elapsed="0.000970">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:16.681417" elapsed="0.001023">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:16.682597" 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-10T00:47:16.682769" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:16.682835" 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-10T00:47:16.672796" elapsed="0.010166">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:16.672555" elapsed="0.010476">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:16.672409" 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-10T00:47:16.672010" elapsed="0.011159">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:16.683412" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:16.644437" elapsed="0.039091">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:17.709787" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:47:17.710125" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:17.709146" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:17.708673" elapsed="0.001597"/>
</kw>
<msg time="2026-04-10T00:47:17.710316" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:17.699497" elapsed="0.010864"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:17.698940" elapsed="0.011493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.710917" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:17.710626" 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-10T00:47:17.716066" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:17.715662" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.716545" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:17.716252" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:17.716621" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:17.716785" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:17.715289" 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-10T00:47:17.716982" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.717677" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:17.717334" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.718319" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:17.717879" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.718753" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:17.718495" 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-10T00:47:17.719196" 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-10T00:47:17.719555" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:17.719408" 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-10T00:47:17.719779" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:17.719635" 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-10T00:47:17.720014" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:17.719873" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:17.719386" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:17.719028" elapsed="0.001085"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:17.718829" elapsed="0.001310"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:17.720180" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:17.720381" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:17.720427" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:17.714532" elapsed="0.005918"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.720910" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:17.720988" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:17.720618" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:17.721572" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:17.721293" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:17.721079" elapsed="0.000633">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:17.721061" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:17.721909" 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-10T00:47:17.722082" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:17.722148" 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-10T00:47:17.712026" elapsed="0.010230">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:17.711739" elapsed="0.010586">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:17.711584" elapsed="0.010794">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:17.711191" elapsed="0.011275">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:17.722706" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:17.684347" elapsed="0.038474">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:18.748206" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:47:18.748516" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:18.747540" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:18.747082" elapsed="0.001576"/>
</kw>
<msg time="2026-04-10T00:47:18.748704" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:18.739088" elapsed="0.009661"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:18.738658" elapsed="0.010273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.749382" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:18.749121" 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-10T00:47:18.754722" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:18.754328" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.755221" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:18.754927" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:18.755298" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:18.755460" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:18.753942" 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-10T00:47:18.755639" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.756311" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:18.755969" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.756739" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:18.756496" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.757169" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:18.756929" 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-10T00:47:18.757593" 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-10T00:47:18.757867" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:18.757701" 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-10T00:47:18.758104" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:18.757950" 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-10T00:47:18.758321" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:18.758182" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:18.757681" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:18.757427" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:18.757243" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:18.758486" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:18.758690" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:18.758737" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:18.753197" elapsed="0.005565"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.759220" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:18.759298" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:18.758947" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:18.759895" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:18.759606" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:18.759391" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:18.759372" 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-10T00:47:18.760214" 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-10T00:47:18.760387" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:18.760453" 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-10T00:47:18.750460" elapsed="0.010145">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:18.750227" elapsed="0.010452">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:18.750065" elapsed="0.010670">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:18.749655" elapsed="0.011173">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:18.761079" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:18.723683" elapsed="0.037515">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:19.784826" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:47:19.785160" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:19.784178" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:19.783703" elapsed="0.001600"/>
</kw>
<msg time="2026-04-10T00:47:19.785349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:19.775603" elapsed="0.009790"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:19.775191" elapsed="0.010276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.785938" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:19.785666" 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-10T00:47:19.791042" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:19.790637" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.791521" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:19.791229" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:19.791597" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:19.791756" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:19.790268" 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-10T00:47:19.791949" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.792604" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:19.792267" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.793044" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:19.792786" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.793455" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:19.793216" 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-10T00:47:19.793906" 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-10T00:47:19.794158" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:19.794013" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:19.794379" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:19.794238" elapsed="0.000274"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:19.794683" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:19.794538" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:19.793994" elapsed="0.000765"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:19.793725" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:19.793541" elapsed="0.001268"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:19.794865" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:19.795070" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:19.795117" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:19.789525" elapsed="0.005616"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.795583" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:19.795662" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:19.795312" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:19.796461" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:19.795990" elapsed="0.000542">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:19.795756" elapsed="0.000842">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:19.795737" 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-10T00:47:19.796785" 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-10T00:47:19.796975" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:19.797044" 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-10T00:47:19.787007" elapsed="0.010146">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:19.786741" elapsed="0.010482">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:19.786602" elapsed="0.010677">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:19.786208" elapsed="0.011160">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:19.797645" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:19.762073" elapsed="0.035691">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:20.825064" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:47:20.825377" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:20.824349" elapsed="0.001093"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:20.823862" elapsed="0.001667"/>
</kw>
<msg time="2026-04-10T00:47:20.825581" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:20.814237" elapsed="0.011391"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:20.813793" elapsed="0.011913"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.826184" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:20.825921" 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-10T00:47:20.831603" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:20.831177" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.832125" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:20.831806" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:20.832201" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:20.832366" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:20.830626" elapsed="0.001766"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:20.832546" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.833490" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:20.832883" elapsed="0.000634"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.833954" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:20.833679" elapsed="0.000303"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.834377" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:20.834131" 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-10T00:47:20.834809" 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-10T00:47:20.835087" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:20.834938" 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-10T00:47:20.835308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:20.835167" 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-10T00:47:20.835531" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:20.835387" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:20.834917" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:20.834638" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:20.834451" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:20.835698" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:20.835924" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:20.835974" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:20.829901" elapsed="0.006096"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.836446" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:20.836525" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:20.836168" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:20.837176" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:20.836837" elapsed="0.000414">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:20.836619" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:20.836600" 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-10T00:47:20.837506" 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-10T00:47:20.837679" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:20.837747" 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-10T00:47:20.827289" elapsed="0.010600">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:20.827046" elapsed="0.010919">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:20.826898" elapsed="0.011125">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:20.826466" 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-10T00:47:20.838394" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:20.798614" elapsed="0.039900">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:21.863173" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:47:21.863482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:21.862510" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:21.862047" elapsed="0.001578"/>
</kw>
<msg time="2026-04-10T00:47:21.863671" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:21.853901" elapsed="0.009814"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:21.853471" elapsed="0.010317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.864248" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:21.863992" 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-10T00:47:21.869555" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:21.869164" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.870053" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:21.869742" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:21.870128" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:21.870287" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:21.868774" 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-10T00:47:21.870464" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.871138" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:21.870781" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.871565" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:21.871322" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.871994" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:21.871737" 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-10T00:47:21.872430" 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-10T00:47:21.872680" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:21.872537" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:21.872913" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:21.872759" 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-10T00:47:21.873134" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:21.872991" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:21.872518" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:21.872249" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:21.872066" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:21.873389" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:21.873596" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:21.873643" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:21.868021" elapsed="0.005646"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.874134" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:21.874212" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:21.873860" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:21.874799" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:21.874524" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:21.874307" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:21.874288" 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-10T00:47:21.875143" 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-10T00:47:21.875316" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:21.875382" 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-10T00:47:21.865314" elapsed="0.010175">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:21.865082" elapsed="0.010478">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:21.864942" elapsed="0.010673">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:21.864534" elapsed="0.011172">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:21.875953" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:21.839354" elapsed="0.036715">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:22.902572" elapsed="0.000231"/>
</kw>
<msg time="2026-04-10T00:47:22.902881" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:22.901921" elapsed="0.001021"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:22.901446" elapsed="0.001576"/>
</kw>
<msg time="2026-04-10T00:47:22.903067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:22.892383" elapsed="0.010729"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:22.891797" elapsed="0.011391"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.903626" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:22.903372" 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-10T00:47:22.908704" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:22.908318" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.909194" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:22.908904" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:22.909268" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:22.909496" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:22.907949" 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-10T00:47:22.909676" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.910363" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:22.910022" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.910790" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:22.910547" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.911219" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:22.910979" 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-10T00:47:22.911639" 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-10T00:47:22.911921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:22.911745" elapsed="0.000232"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:22.912141" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:22.912002" 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-10T00:47:22.912361" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:22.912218" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:22.911726" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:22.911474" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:22.911292" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:22.912523" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:22.912724" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:22.912771" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:22.907185" elapsed="0.005610"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.913248" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:22.913325" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:22.912979" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:22.914103" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:22.913805" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:22.913417" elapsed="0.000821">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:22.913399" 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-10T00:47:22.914421" 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-10T00:47:22.914591" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:22.914658" 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-10T00:47:22.904681" elapsed="0.010081">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:22.904455" elapsed="0.010376">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:22.904318" elapsed="0.010584">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:22.903926" elapsed="0.011065">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:22.915222" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:22.876838" elapsed="0.038499">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:23.943240" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:47:23.943563" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:23.942537" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:23.942082" elapsed="0.001639"/>
</kw>
<msg time="2026-04-10T00:47:23.943769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:23.934097" elapsed="0.009717"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:23.933664" elapsed="0.010240"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.944358" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:23.944099" 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-10T00:47:23.949703" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:23.949318" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.950189" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:23.949903" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:23.950262" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:23.950421" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:23.948947" 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-10T00:47:23.950595" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.951267" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:23.950921" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.951684" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:23.951448" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.952103" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:23.951865" 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-10T00:47:23.952519" 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-10T00:47:23.952772" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:23.952628" 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-10T00:47:23.953006" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:23.952866" 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-10T00:47:23.953221" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:23.953082" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:23.952609" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:23.952353" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:23.952173" elapsed="0.001170"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:23.953382" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:47:23.953581" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:23.953626" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:23.948198" elapsed="0.005451"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.954190" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:23.954266" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:23.953917" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:23.954861" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:23.954570" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:23.954357" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:23.954339" 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-10T00:47:23.955207" 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-10T00:47:23.955380" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:23.955445" 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-10T00:47:23.945442" elapsed="0.010110">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:23.945196" elapsed="0.010424">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:23.945052" elapsed="0.010622">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:23.944630" elapsed="0.011134">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:23.956009" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:23.916263" elapsed="0.039862">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:24.982232" elapsed="0.000235"/>
</kw>
<msg time="2026-04-10T00:47:24.982530" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:24.981569" elapsed="0.001022"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:24.981109" elapsed="0.001582"/>
</kw>
<msg time="2026-04-10T00:47:24.982739" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:24.972282" 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-10T00:47:24.971698" elapsed="0.011177"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.983328" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:24.983065" 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-10T00:47:24.988375" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:24.987985" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.988866" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:24.988561" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:24.988942" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:24.989100" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:24.987600" 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-10T00:47:24.989280" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.989946" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:24.989593" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.990465" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:24.990220" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.990931" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:24.990668" 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-10T00:47:24.991354" 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-10T00:47:24.991610" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:24.991466" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:24.991829" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:24.991690" 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-10T00:47:24.992066" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:24.991923" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:24.991444" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:24.991190" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:24.991006" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:24.992232" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:24.992432" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:24.992479" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:24.986886" elapsed="0.005616"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.992965" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:24.993043" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:24.992674" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:24.995229" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:24.994942" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:24.994699" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:24.993119" elapsed="0.002280">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:24.995554" 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-10T00:47:24.995727" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:24.995794" 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-10T00:47:24.984387" elapsed="0.011531">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:24.984159" elapsed="0.011830">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:24.984006" elapsed="0.012038">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:24.983597" elapsed="0.012537">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:24.996366" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:24.956975" elapsed="0.039506">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:26.022720" elapsed="0.000261"/>
</kw>
<msg time="2026-04-10T00:47:26.023050" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:26.022072" elapsed="0.001043"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:26.021579" elapsed="0.001703"/>
</kw>
<msg time="2026-04-10T00:47:26.023329" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:26.012716" elapsed="0.010659"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:26.012153" elapsed="0.011296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.023911" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:26.023636" 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-10T00:47:26.029426" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:26.029001" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.029946" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:26.029627" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:26.030021" elapsed="0.000049"/>
</return>
<msg time="2026-04-10T00:47:26.030201" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:26.028595" elapsed="0.001632"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:26.030379" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.031043" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:26.030693" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.031463" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:26.031225" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.031882" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:26.031632" 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-10T00:47:26.032445" 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-10T00:47:26.032701" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:26.032554" 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-10T00:47:26.032950" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:26.032780" elapsed="0.000227"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:26.033172" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:26.033030" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:26.032534" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:26.032278" elapsed="0.000995"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:26.031959" elapsed="0.001340"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:26.033338" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:26.033540" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:26.033586" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:26.027741" elapsed="0.005869"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.034099" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:26.034177" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:26.033781" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:26.034768" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:26.034486" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:26.034270" elapsed="0.000715">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:26.034252" elapsed="0.000767">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:26.035174" 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-10T00:47:26.035345" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:26.035411" 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-10T00:47:26.024969" elapsed="0.010551">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:26.024718" elapsed="0.010871">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:26.024580" elapsed="0.011064">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:26.024186" elapsed="0.011546">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:26.035978" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:25.997427" elapsed="0.038666">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:27.061021" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:47:27.061335" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:27.060328" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:27.059830" elapsed="0.001650"/>
</kw>
<msg time="2026-04-10T00:47:27.061542" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:27.051514" elapsed="0.010075"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:27.051101" elapsed="0.010564"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.062152" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:27.061874" 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-10T00:47:27.067399" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:27.067005" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.067895" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:27.067589" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:27.067972" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:27.068135" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:27.066610" 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-10T00:47:27.068313" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.068988" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:27.068634" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.069413" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:27.069173" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.069922" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:27.069650" 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-10T00:47:27.070347" 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-10T00:47:27.070678" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:27.070532" 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-10T00:47:27.070913" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:27.070759" 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-10T00:47:27.071132" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:27.070992" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:27.070511" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:27.070180" elapsed="0.001051"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:27.069998" elapsed="0.001259"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:27.071297" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:27.071497" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:27.071544" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:27.065824" elapsed="0.005744"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.072025" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:27.072103" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:27.071737" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:27.072897" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:27.072413" elapsed="0.000557">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:27.072198" elapsed="0.000838">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:27.072180" 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-10T00:47:27.073221" 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-10T00:47:27.073393" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:27.073460" 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-10T00:47:27.063264" elapsed="0.010330">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:27.063024" elapsed="0.010641">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:27.062832" elapsed="0.010888">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:27.062434" elapsed="0.011378">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:27.074061" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:27.036994" elapsed="0.037185">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:28.099017" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:47:28.099318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:28.098356" elapsed="0.001024"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:28.097895" elapsed="0.001565"/>
</kw>
<msg time="2026-04-10T00:47:28.099506" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:28.089879" elapsed="0.009672"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:28.089457" elapsed="0.010255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.100178" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:28.099918" 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-10T00:47:28.105306" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:28.104892" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.105810" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:28.105517" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:28.105901" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:28.106068" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:28.104486" elapsed="0.001611"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:28.106250" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.106921" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:28.106563" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.107555" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:28.107101" elapsed="0.000482"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.107993" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:28.107732" 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-10T00:47:28.108412" 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-10T00:47:28.108663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:28.108519" 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-10T00:47:28.108896" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:28.108743" elapsed="0.000235"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:28.109158" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:28.109011" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:28.108500" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:28.108248" elapsed="0.001009"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:28.108067" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:28.109321" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:28.109522" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:28.109568" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:28.103749" elapsed="0.005842"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.110062" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:28.110141" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:28.109761" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:28.110725" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:28.110449" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:28.110235" elapsed="0.000645">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:28.110216" 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-10T00:47:28.111063" 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-10T00:47:28.111232" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:28.111298" 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-10T00:47:28.101244" elapsed="0.010212">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:28.101011" elapsed="0.010519">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:28.100859" elapsed="0.010726">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:28.100451" elapsed="0.011224">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:28.111928" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:28.075015" elapsed="0.037038">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:29.134570" elapsed="0.000304"/>
</kw>
<msg time="2026-04-10T00:47:29.134944" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:29.133921" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:29.133364" elapsed="0.001730"/>
</kw>
<msg time="2026-04-10T00:47:29.135141" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:29.125252" elapsed="0.009933"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:29.124822" elapsed="0.010439"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.135742" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:29.135454" 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-10T00:47:29.141369" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:29.140973" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.141861" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:29.141556" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:29.141938" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:29.142100" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:29.140582" 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-10T00:47:29.142301" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.142999" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:29.142639" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.143433" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:29.143185" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.143871" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:29.143608" 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-10T00:47:29.144334" 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-10T00:47:29.144660" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:29.144509" 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-10T00:47:29.144898" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:29.144740" elapsed="0.000311"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:29.145227" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:29.145078" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:29.144488" elapsed="0.000815"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:29.144158" elapsed="0.001170"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:29.143947" elapsed="0.001407"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:29.145399" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:29.145606" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:29.145653" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:29.139801" elapsed="0.005876"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.146176" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:29.146255" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:29.145863" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:29.146868" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:29.146568" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:29.146350" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:29.146331" 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-10T00:47:29.147252" 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-10T00:47:29.147483" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:29.147567" 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-10T00:47:29.136885" elapsed="0.010824">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:29.136626" elapsed="0.011175">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:29.136483" elapsed="0.011413">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:29.136041" elapsed="0.011968">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:29.148298" elapsed="0.000032"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:29.113213" elapsed="0.035262">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:30.172919" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:47:30.173243" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:30.172255" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:30.171753" elapsed="0.001631"/>
</kw>
<msg time="2026-04-10T00:47:30.173432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:30.163357" elapsed="0.010123"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:30.162758" elapsed="0.010795"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.174012" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:30.173740" 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-10T00:47:30.179150" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:30.178738" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.179630" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:30.179338" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:30.179706" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:30.179914" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:30.178286" 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-10T00:47:30.180100" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.180762" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:30.180418" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.181205" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:30.180960" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.181646" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:30.181384" 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-10T00:47:30.182092" 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-10T00:47:30.182362" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:30.182207" 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-10T00:47:30.182614" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:30.182446" 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-10T00:47:30.182856" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:30.182693" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:30.182187" elapsed="0.000745"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:30.181927" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:30.181721" elapsed="0.001259"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:30.183019" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:47:30.183241" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:30.183293" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:30.177554" elapsed="0.005768"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.183770" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:30.183895" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:30.183499" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:30.184665" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:30.184380" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:30.183990" elapsed="0.000819">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:30.183971" 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-10T00:47:30.185008" 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-10T00:47:30.185178" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:30.185242" 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-10T00:47:30.175057" elapsed="0.010292">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:30.174810" elapsed="0.010607">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:30.174669" elapsed="0.010806">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:30.174280" elapsed="0.011282">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:30.185830" elapsed="0.000040"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:30.149341" elapsed="0.036623">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:31.213526" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:47:31.213860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:31.212876" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:31.212395" elapsed="0.001615"/>
</kw>
<msg time="2026-04-10T00:47:31.214057" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:31.202978" elapsed="0.011123"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:31.202282" elapsed="0.011892"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.214616" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:31.214361" 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-10T00:47:31.219912" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:31.219506" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.220386" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:31.220099" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:31.220460" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:31.220617" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:31.219088" 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-10T00:47:31.220799" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.221464" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:31.221129" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.221900" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:31.221645" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.222313" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:31.222071" 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-10T00:47:31.222733" 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-10T00:47:31.223003" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:31.222855" 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-10T00:47:31.223223" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:31.223085" 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-10T00:47:31.223474" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:31.223332" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:31.222822" elapsed="0.000726"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:31.222565" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:31.222386" elapsed="0.001212"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:31.223704" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:31.223923" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:31.223969" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:31.218354" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.224432" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:31.224508" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:31.224163" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:31.225108" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:31.224814" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:31.224600" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:31.224581" 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-10T00:47:31.225428" 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-10T00:47:31.225599" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:31.225665" 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-10T00:47:31.215696" elapsed="0.010076">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:31.215454" elapsed="0.010403">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:31.215311" elapsed="0.010605">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:31.214902" elapsed="0.011104">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:31.226237" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:31.186779" elapsed="0.039574">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:32.250307" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:47:32.250612" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:32.249647" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:32.249190" elapsed="0.001582"/>
</kw>
<msg time="2026-04-10T00:47:32.250822" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:32.241170" elapsed="0.009712"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:32.240744" elapsed="0.010228"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.251444" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:32.251163" 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-10T00:47:32.256620" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:32.256230" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.257113" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:32.256805" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:32.257187" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:32.257411" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:32.255835" 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-10T00:47:32.257592" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.258267" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:32.257928" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.258696" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:32.258449" elapsed="0.000302"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.259170" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:32.258921" 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-10T00:47:32.259593" 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-10T00:47:32.259861" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:32.259700" 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-10T00:47:32.260084" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:32.259944" 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-10T00:47:32.260301" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:32.260161" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:32.259680" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:32.259428" elapsed="0.000972"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:32.259249" elapsed="0.001177"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:32.260466" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:47:32.260664" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:32.260711" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:32.255107" elapsed="0.005628"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.261362" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:32.261443" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:32.260919" elapsed="0.000549"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:32.262057" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:32.261755" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:32.261539" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:32.261520" 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-10T00:47:32.262380" 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-10T00:47:32.262554" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:32.262624" 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-10T00:47:32.252519" elapsed="0.010235">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:32.252291" elapsed="0.010548">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:32.252149" elapsed="0.010765">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:32.251735" elapsed="0.011270">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:32.263238" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:32.227200" elapsed="0.036154">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:33.288707" elapsed="0.000278"/>
</kw>
<msg time="2026-04-10T00:47:33.289056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:33.288036" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:33.287544" elapsed="0.001662"/>
</kw>
<msg time="2026-04-10T00:47:33.289255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:33.279466" elapsed="0.009836"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:33.279050" elapsed="0.010329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.289857" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:33.289572" 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-10T00:47:33.295246" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:33.294825" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.295761" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:33.295437" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:33.295862" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:47:33.296045" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:33.294444" 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-10T00:47:33.296230" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.296925" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:33.296557" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.297372" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:33.297112" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.297797" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:33.297549" 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-10T00:47:33.298315" 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-10T00:47:33.298579" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:33.298429" 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-10T00:47:33.298803" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:33.298664" 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-10T00:47:33.299038" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:33.298897" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:33.298409" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:33.298074" elapsed="0.001061"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:33.297887" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:33.299201" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:33.299402" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:33.299448" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:33.293680" elapsed="0.005791"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.300000" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:33.300079" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:33.299709" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:33.300671" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:33.300387" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:33.300171" elapsed="0.000639">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:33.300153" 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-10T00:47:33.301011" 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-10T00:47:33.301181" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:33.301246" 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-10T00:47:33.290967" elapsed="0.010386">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:33.290710" elapsed="0.010712">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:33.290561" elapsed="0.010915">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:33.290140" elapsed="0.011424">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:33.301794" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:33.264274" elapsed="0.037651">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:34.329098" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:47:34.329412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:34.328440" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:34.327985" elapsed="0.001569"/>
</kw>
<msg time="2026-04-10T00:47:34.329600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:34.319823" elapsed="0.009834"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:34.319397" elapsed="0.010341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.330204" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:34.329947" 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-10T00:47:34.335211" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:34.334811" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.335684" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:34.335395" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:34.335756" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:34.335932" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:34.334444" 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-10T00:47:34.336108" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.336751" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:34.336418" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.337267" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:34.337024" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.337706" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:34.337436" 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-10T00:47:34.338144" 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-10T00:47:34.338395" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:34.338251" 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-10T00:47:34.338612" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:34.338474" 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-10T00:47:34.338829" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:34.338689" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:34.338232" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:34.337978" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:34.337779" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:34.339008" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:34.339207" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:34.339253" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:34.333716" elapsed="0.005560"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.339716" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:34.339794" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:34.339445" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:34.340576" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:34.340116" elapsed="0.000532">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:34.339901" elapsed="0.000811">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:34.339883" elapsed="0.000861">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:34.340910" 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-10T00:47:34.341083" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:34.341148" 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-10T00:47:34.331247" elapsed="0.010010">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:34.331021" elapsed="0.010304">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:34.330877" elapsed="0.010503">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:34.330470" elapsed="0.010999">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:34.341716" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:34.302720" elapsed="0.039112">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:35.367074" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:47:35.367384" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:35.366414" elapsed="0.001033"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:35.365957" elapsed="0.001658"/>
</kw>
<msg time="2026-04-10T00:47:35.367662" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:35.357974" elapsed="0.009734"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:35.357504" elapsed="0.010278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.368245" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:35.367984" 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-10T00:47:35.373365" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:35.372955" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.373855" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:35.373551" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:35.373932" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:35.374091" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:35.372560" 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-10T00:47:35.374268" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.374951" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:35.374596" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.375585" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:35.375151" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.376032" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:35.375763" 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-10T00:47:35.376450" 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-10T00:47:35.376717" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:35.376569" 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-10T00:47:35.376961" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:35.376803" 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-10T00:47:35.377208" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:35.377041" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:35.376548" elapsed="0.000735"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:35.376285" elapsed="0.001023"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:35.376105" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:35.377373" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:35.377573" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:35.377619" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:35.371818" elapsed="0.005825"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.378110" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:35.378187" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:35.377816" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:35.378776" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:35.378493" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:35.378279" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:35.378261" 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-10T00:47:35.379155" 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-10T00:47:35.379327" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:35.379392" 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-10T00:47:35.369307" elapsed="0.010191">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:35.369063" elapsed="0.010505">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:35.368924" elapsed="0.010699">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:35.368517" elapsed="0.011194">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:35.379954" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:35.342662" elapsed="0.037407">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:36.406247" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:47:36.406573" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:36.405421" elapsed="0.001220"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:36.404911" elapsed="0.001811"/>
</kw>
<msg time="2026-04-10T00:47:36.406768" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:36.396631" elapsed="0.010182"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:36.396137" elapsed="0.010766"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.407364" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:36.407109" 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-10T00:47:36.412796" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:36.412380" elapsed="0.000444"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.413294" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:36.413003" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:36.413369" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:47:36.413535" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:36.412006" 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-10T00:47:36.413713" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.414385" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:36.414050" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.414803" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:36.414566" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.415245" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:36.415004" 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-10T00:47:36.415677" 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-10T00:47:36.416037" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:36.415886" 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-10T00:47:36.416258" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:36.416119" 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-10T00:47:36.416473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:36.416334" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:36.415863" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:36.415509" elapsed="0.001100"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:36.415320" elapsed="0.001316"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:36.416678" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:36.416901" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:36.416949" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:36.411274" elapsed="0.005699"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.417421" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:36.417498" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:36.417145" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:36.418115" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:36.417807" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:36.417590" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:36.417572" 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-10T00:47:36.418445" 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-10T00:47:36.418615" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:36.418681" 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-10T00:47:36.408466" elapsed="0.010325">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:36.408222" elapsed="0.010654">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:36.408071" elapsed="0.010862">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:36.407645" elapsed="0.011379">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:36.419255" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:36.380968" elapsed="0.038402">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:37.449584" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:47:37.449901" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:37.448935" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:37.448454" elapsed="0.001592"/>
</kw>
<msg time="2026-04-10T00:47:37.450093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:37.440205" elapsed="0.009932"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:37.439478" elapsed="0.010813"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.450747" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:37.450485" 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-10T00:47:37.455909" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:37.455469" elapsed="0.000468"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.456398" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:37.456095" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:37.456474" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:47:37.456687" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:37.455100" elapsed="0.001613"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:37.456880" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.457535" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:37.457198" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.457991" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:37.457717" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.458414" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:37.458175" 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-10T00:47:37.458836" 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-10T00:47:37.459105" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:37.458961" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:37.459325" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:37.459186" 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-10T00:47:37.459539" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:37.459401" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:37.458941" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:37.458670" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:37.458488" elapsed="0.001174"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:37.459701" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:37.459915" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:37.459962" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:37.454363" elapsed="0.005622"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.460443" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:37.460522" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:37.460173" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:37.461317" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:37.460829" elapsed="0.000559">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:37.460614" elapsed="0.000841">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:37.460596" 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-10T00:47:37.461640" 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-10T00:47:37.461813" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:37.461895" 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-10T00:47:37.451812" elapsed="0.010242">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:37.451579" elapsed="0.010549">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:37.451440" 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-10T00:47:37.451040" elapsed="0.011235">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:37.462509" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:37.420410" elapsed="0.042215">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:38.491202" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:47:38.491526" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:38.490522" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:38.490044" elapsed="0.001629"/>
</kw>
<msg time="2026-04-10T00:47:38.491722" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:38.480348" elapsed="0.011420"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:38.479620" elapsed="0.012541"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.492698" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:38.492411" 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-10T00:47:38.497920" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:38.497493" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.498412" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:38.498111" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:38.498496" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:38.498661" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:38.497105" 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-10T00:47:38.498841" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.499763" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:38.499177" elapsed="0.000631"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.500239" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:38.499990" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.500649" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:38.500411" 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-10T00:47:38.501089" 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-10T00:47:38.501342" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:38.501199" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:38.501559" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:38.501422" 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-10T00:47:38.501879" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:38.501720" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:38.501179" elapsed="0.000777"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:38.500921" elapsed="0.001060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:38.500722" elapsed="0.001285"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:38.502046" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:38.502247" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:38.502293" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:38.496348" elapsed="0.005968"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.502758" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:38.502834" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:38.502484" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:38.503485" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:38.503200" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:38.502969" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:38.502939" 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-10T00:47:38.503870" 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-10T00:47:38.504052" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:38.504121" 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-10T00:47:38.493791" elapsed="0.010442">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:38.493555" elapsed="0.010749">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:38.493405" 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-10T00:47:38.492998" elapsed="0.011455">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:38.504688" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:38.463476" elapsed="0.041331">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:39.531139" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:47:39.531492" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:39.530459" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:39.529983" elapsed="0.001655"/>
</kw>
<msg time="2026-04-10T00:47:39.531685" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:39.520992" elapsed="0.010737"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:39.520373" elapsed="0.011429"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.532270" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:39.532008" 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-10T00:47:39.537961" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:39.537537" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.538458" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:39.538152" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:39.538533" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:39.538699" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:39.537062" 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-10T00:47:39.538900" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.539613" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:39.539232" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.540064" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:39.539801" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.540481" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:39.540240" 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-10T00:47:39.540923" 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-10T00:47:39.541183" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:39.541036" 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-10T00:47:39.541405" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:39.541264" 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-10T00:47:39.541621" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:39.541482" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:39.541015" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:39.540738" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:39.540555" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:39.541786" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:39.542004" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:39.542050" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:39.536297" elapsed="0.005776"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.542530" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:39.542608" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:39.542245" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:39.543222" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:39.542933" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:39.542702" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:39.542683" 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-10T00:47:39.543581" 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-10T00:47:39.543753" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:39.543820" 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-10T00:47:39.533477" elapsed="0.010472">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:39.533223" elapsed="0.010796">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:39.533050" elapsed="0.011025">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:39.532547" elapsed="0.011619">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:39.544449" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:39.505777" elapsed="0.038791">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:40.571481" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:47:40.571802" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:40.570714" elapsed="0.001169"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:40.570252" elapsed="0.001714"/>
</kw>
<msg time="2026-04-10T00:47:40.572014" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:40.561101" elapsed="0.010958"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:40.560486" elapsed="0.011671"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.572618" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:40.572357" 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-10T00:47:40.577763" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:40.577370" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.578273" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:40.577970" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:40.578351" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:40.578512" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:40.576977" 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-10T00:47:40.578690" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.579686" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:40.579023" elapsed="0.000692"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.580196" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:40.579923" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.580640" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:40.580396" 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-10T00:47:40.581092" 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-10T00:47:40.581360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:40.581200" 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-10T00:47:40.581582" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:40.581443" 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-10T00:47:40.581798" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:40.581658" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:40.581181" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:40.580911" elapsed="0.001002"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:40.580713" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:40.582064" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:40.582277" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:40.582328" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:40.576241" elapsed="0.006110"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.582800" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:40.582896" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:40.582525" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:40.583703" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:40.583417" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:40.583178" elapsed="0.000683">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:40.582974" elapsed="0.000922">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:40.584050" 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-10T00:47:40.584223" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:40.584290" 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-10T00:47:40.573683" elapsed="0.010724">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:40.573451" elapsed="0.011026">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:40.573310" elapsed="0.011224">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:40.572910" elapsed="0.011714">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:40.584964" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:40.545351" elapsed="0.039731">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:41.609054" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:47:41.609362" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:41.608400" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:41.607932" elapsed="0.001571"/>
</kw>
<msg time="2026-04-10T00:47:41.609547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:41.599959" elapsed="0.009631"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:41.599538" elapsed="0.010126"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.610130" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:41.609874" 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-10T00:47:41.615476" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:41.615090" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.615965" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:41.615662" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:41.616039" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:41.616288" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:41.614668" elapsed="0.001645"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:41.616468" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.617136" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:41.616783" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.617558" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:41.617318" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.617988" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:41.617731" 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-10T00:47:41.618412" 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-10T00:47:41.618662" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:41.618519" 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-10T00:47:41.618932" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:41.618772" 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-10T00:47:41.619151" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:41.619011" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:41.618500" elapsed="0.000726"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:41.618246" elapsed="0.001003"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:41.618063" elapsed="0.001212"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:41.619315" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:41.619514" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:41.619560" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:41.613954" elapsed="0.005630"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.620042" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:41.620119" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:41.619753" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:41.620708" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:41.620426" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:41.620212" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:41.620194" 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-10T00:47:41.621040" 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-10T00:47:41.621210" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:41.621276" 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-10T00:47:41.611205" elapsed="0.010177">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:41.610967" elapsed="0.010485">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:41.610812" elapsed="0.010694">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:41.610402" elapsed="0.011194">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:41.621826" elapsed="0.000039"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:41.586085" elapsed="0.035873">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:42.649281" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:47:42.649603" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:42.648618" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:42.648160" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:47:42.649793" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:42.640089" elapsed="0.009748"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:42.639638" elapsed="0.010289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.650481" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:42.650121" elapsed="0.000405"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.655511" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:42.655121" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.655996" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:42.655695" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:42.656070" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:42.656229" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:42.654739" elapsed="0.001514"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:42.656402" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.657063" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:42.656712" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.657477" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:42.657241" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.657892" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:42.657644" 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-10T00:47:42.658305" 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-10T00:47:42.658580" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:42.658435" 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-10T00:47:42.658796" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:42.658658" 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-10T00:47:42.659028" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:42.658887" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:42.658415" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:42.658142" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:42.657963" elapsed="0.001188"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:42.659191" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:42.659387" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:42.659432" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:42.654014" elapsed="0.005440"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.661685" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:42.661767" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:42.659717" elapsed="0.002075"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:42.662440" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:42.662099" elapsed="0.000412">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:42.661877" elapsed="0.000698">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:42.661857" elapsed="0.000750">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:42.662757" 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-10T00:47:42.662942" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:42.663009" 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-10T00:47:42.651544" elapsed="0.011572">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:42.651309" elapsed="0.011875">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:42.651163" elapsed="0.012076">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:42.650750" elapsed="0.012579">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:42.663559" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:42.622940" elapsed="0.040734">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:43.688601" elapsed="0.000285"/>
</kw>
<msg time="2026-04-10T00:47:43.688964" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:43.687926" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:43.687415" elapsed="0.001706"/>
</kw>
<msg time="2026-04-10T00:47:43.689170" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:43.679275" elapsed="0.009941"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:43.678772" elapsed="0.010520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.689790" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:43.689494" 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-10T00:47:43.734148" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:43.733659" elapsed="0.000521"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.734641" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:43.734348" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:43.734716" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:47:43.734903" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:43.733272" elapsed="0.001656"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:43.735080" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.735748" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:43.735411" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.736268" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:43.736026" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.736678" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:43.736440" 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-10T00:47:43.737130" 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-10T00:47:43.737384" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:43.737240" 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-10T00:47:43.737604" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:43.737465" 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-10T00:47:43.737820" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:43.737681" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:43.737219" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:43.736960" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:43.736754" elapsed="0.001251"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:43.738049" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:43.738256" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:43.738302" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:43.732465" elapsed="0.005860"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.738774" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:43.738865" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:43.738497" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:43.739489" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:43.739179" elapsed="0.000387">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:43.738960" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:43.738941" 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-10T00:47:43.739818" 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-10T00:47:43.740008" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:43.740074" 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-10T00:47:43.690941" elapsed="0.049241">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:43.690674" elapsed="0.049578">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:43.690519" elapsed="0.049789">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:43.690107" elapsed="0.050293">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:43.740631" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:43.664550" elapsed="0.076198">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:44.766348" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:47:44.766686" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:44.765665" elapsed="0.001107"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:44.765162" elapsed="0.001831"/>
</kw>
<msg time="2026-04-10T00:47:44.767042" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:44.756686" 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-10T00:47:44.756231" elapsed="0.010935"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.767663" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:44.767392" 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-10T00:47:44.772830" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:44.772436" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.773338" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:44.773034" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:44.773413" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:47:44.773576" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:44.772053" 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-10T00:47:44.773794" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.774491" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:44.774138" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.774964" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:44.774678" elapsed="0.000314"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.775397" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:44.775140" 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-10T00:47:44.775822" elapsed="0.000047"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:44.776105" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:44.775957" 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-10T00:47:44.776324" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:44.776185" 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-10T00:47:44.776549" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:44.776410" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:44.775937" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:44.775655" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:44.775473" elapsed="0.001199"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:44.776712" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:44.776953" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:44.777011" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:44.771324" elapsed="0.005711"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.777695" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:44.777776" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:44.777207" elapsed="0.000594"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:44.778479" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:44.778109" elapsed="0.000450">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:44.777888" elapsed="0.000793">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:44.777869" elapsed="0.000847">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:44.778892" 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-10T00:47:44.779065" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:44.779131" 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-10T00:47:44.768775" elapsed="0.010466">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:44.768541" elapsed="0.010770">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:44.768396" elapsed="0.010971">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:44.767970" elapsed="0.011487">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:44.779688" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:44.741601" elapsed="0.038202">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:45.804685" elapsed="0.000275"/>
</kw>
<msg time="2026-04-10T00:47:45.805036" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:45.804016" elapsed="0.001098"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:45.803525" elapsed="0.001676"/>
</kw>
<msg time="2026-04-10T00:47:45.805264" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:45.795236" elapsed="0.010076"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:45.794782" elapsed="0.010612"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.805872" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:45.805594" 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-10T00:47:45.811314" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:45.810905" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.811796" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:45.811507" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:45.811890" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:45.812055" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:45.810501" 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-10T00:47:45.812242" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.812929" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:45.812565" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.813405" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:45.813111" elapsed="0.000321"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.813819" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:45.813581" 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-10T00:47:45.814278" 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-10T00:47:45.814663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:45.814510" 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-10T00:47:45.814902" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:45.814745" 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-10T00:47:45.815123" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:45.814983" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:45.814488" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:45.814099" elapsed="0.001124"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:45.813912" elapsed="0.001346"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:45.815301" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:45.815507" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:45.815554" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:45.809746" elapsed="0.005831"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.816053" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:45.816130" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:45.815750" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:45.816745" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:45.816457" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:45.816224" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:45.816205" elapsed="0.000737">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:45.817095" 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-10T00:47:45.817287" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:45.817360" 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-10T00:47:45.806984" elapsed="0.010487">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:45.806718" elapsed="0.010824">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:45.806567" 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-10T00:47:45.806163" 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-10T00:47:45.817949" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:45.780624" elapsed="0.037445">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:46.845606" elapsed="0.000355"/>
</kw>
<msg time="2026-04-10T00:47:46.846033" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:46.844940" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:46.844403" elapsed="0.001796"/>
</kw>
<msg time="2026-04-10T00:47:46.846245" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:46.835267" elapsed="0.011024"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:46.834601" elapsed="0.011843"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.846937" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:46.846643" 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-10T00:47:46.852857" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:46.852339" elapsed="0.000588"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.853468" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:46.853163" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:46.853546" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:47:46.853758" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:46.851865" elapsed="0.001928"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:46.854032" elapsed="0.000233"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.854947" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:46.854502" elapsed="0.000476"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.855412" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:46.855153" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.855857" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:46.855591" 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-10T00:47:46.856318" 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-10T00:47:46.856579" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:46.856432" 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-10T00:47:46.856889" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:46.856662" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:46.857156" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:46.856973" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:46.856412" elapsed="0.000851"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:46.856144" elapsed="0.001154"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:46.855939" elapsed="0.001394"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:46.857390" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:47:46.857666" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:46.857728" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:46.850885" elapsed="0.006875"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.858688" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:46.858794" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:46.858003" elapsed="0.000824"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:46.859565" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:46.859212" elapsed="0.000444">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:46.858937" elapsed="0.000807">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:46.858912" elapsed="0.000873">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:46.860006" 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-10T00:47:46.860239" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:46.860323" 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-10T00:47:46.848109" elapsed="0.012491">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:46.847866" elapsed="0.012828">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:46.847704" elapsed="0.013062">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:46.847219" elapsed="0.013719">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:46.861261" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:46.818993" elapsed="0.042424">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:47.886730" elapsed="0.000287"/>
</kw>
<msg time="2026-04-10T00:47:47.887091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:47.886035" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:47.885522" elapsed="0.001751"/>
</kw>
<msg time="2026-04-10T00:47:47.887322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:47.877098" elapsed="0.010283"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:47.876275" elapsed="0.011200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.887961" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:47.887682" 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-10T00:47:47.893638" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:47.893184" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.894140" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:47.893830" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:47.894217" elapsed="0.000050"/>
</return>
<msg time="2026-04-10T00:47:47.894416" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:47.892790" elapsed="0.001651"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:47.894627" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.895335" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:47.894970" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.895793" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:47.895541" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.896228" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:47.895986" 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-10T00:47:47.896751" 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-10T00:47:47.897029" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:47.896880" 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-10T00:47:47.897249" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:47.897110" 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-10T00:47:47.897600" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:47.897429" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:47.896857" elapsed="0.000828"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:47.896573" elapsed="0.001137"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:47.896329" elapsed="0.001408"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:47.897778" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:47.898001" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:47.898047" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:47.891997" elapsed="0.006073"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.898569" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:47.898660" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:47.898247" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:47.899287" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:47.898994" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:47.898756" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:47.898737" 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-10T00:47:47.899670" 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-10T00:47:47.899869" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:47.899939" 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-10T00:47:47.889176" elapsed="0.010876">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:47.888915" elapsed="0.011207">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:47.888748" elapsed="0.011430">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:47.888281" elapsed="0.011987">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:47.900554" elapsed="0.000038"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:47.862338" elapsed="0.038363">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:48.926080" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:47:48.926382" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:48.925412" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:48.924949" elapsed="0.001573"/>
</kw>
<msg time="2026-04-10T00:47:48.926569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:48.916907" elapsed="0.009707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:48.916483" elapsed="0.010205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.927157" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:48.926894" 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-10T00:47:48.933140" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:48.932729" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.933626" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:48.933329" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:48.933702" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:48.933877" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:48.932281" 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-10T00:47:48.934058" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.934718" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:48.934378" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.935165" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:48.934920" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.935580" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:48.935339" 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-10T00:47:48.936019" 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-10T00:47:48.936298" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:48.936151" 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-10T00:47:48.936531" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:48.936387" 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-10T00:47:48.936747" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:48.936609" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:48.936108" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:48.935837" elapsed="0.001022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:48.935653" elapsed="0.001234"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:48.936927" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:48.937128" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:48.937175" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:48.931532" elapsed="0.005667"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.937818" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:48.937914" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:48.937368" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:48.938516" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:48.938229" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:48.938010" elapsed="0.000642">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:48.937992" 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-10T00:47:48.938838" 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-10T00:47:48.939029" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:48.939098" 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-10T00:47:48.929035" elapsed="0.010171">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:48.927978" elapsed="0.011299">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:48.927823" elapsed="0.011510">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:48.927430" elapsed="0.011995">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:48.939709" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:48.901494" elapsed="0.038334">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:49.967769" elapsed="0.000277"/>
</kw>
<msg time="2026-04-10T00:47:49.968114" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:49.967054" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:49.966507" elapsed="0.001755"/>
</kw>
<msg time="2026-04-10T00:47:49.968310" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:49.957445" elapsed="0.010910"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:49.956767" elapsed="0.011665"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.968992" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:49.968699" elapsed="0.000350"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.974795" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:49.974365" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.975317" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:49.975008" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:49.975397" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:47:49.975567" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:49.973968" 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-10T00:47:49.975760" elapsed="0.000190"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.976461" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:49.976117" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.976904" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:49.976646" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.977338" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:49.977077" 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-10T00:47:49.977784" 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-10T00:47:49.978061" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:49.977913" 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-10T00:47:49.978292" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:49.978149" 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-10T00:47:49.978507" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:49.978368" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:49.977891" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:49.977613" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:49.977415" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:49.978746" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:49.978972" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:49.979019" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:49.973223" elapsed="0.005820"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.979509" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:49.979585" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:49.979226" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:49.980233" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:49.979928" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:49.979678" elapsed="0.000706">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:49.979660" 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-10T00:47:49.980571" 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-10T00:47:49.980746" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:49.980812" 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-10T00:47:49.970359" elapsed="0.010581">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:49.970053" elapsed="0.010959">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:49.969865" 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-10T00:47:49.969372" elapsed="0.011792">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:49.981415" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:49.940752" elapsed="0.040782">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:51.006102" elapsed="0.000433"/>
</kw>
<msg time="2026-04-10T00:47:51.006606" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:51.005438" elapsed="0.001233"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:51.004974" elapsed="0.001804"/>
</kw>
<msg time="2026-04-10T00:47:51.006825" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:50.996816" elapsed="0.010076"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:50.996357" elapsed="0.010615"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.007526" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:51.007191" 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-10T00:47:51.012938" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:51.012518" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.013456" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:51.013128" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:51.013532" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:51.013795" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:51.012125" elapsed="0.001696"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:51.013999" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.014683" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:51.014341" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.015144" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:51.014885" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.015672" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:51.015405" 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-10T00:47:51.016152" 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-10T00:47:51.016412" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:51.016264" elapsed="0.000237"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:51.016697" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:51.016533" 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-10T00:47:51.016940" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:51.016780" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:51.016244" elapsed="0.000774"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:51.015951" elapsed="0.001091"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:51.015750" elapsed="0.001318"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:51.017109" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:51.017314" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:51.017360" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:51.011275" elapsed="0.006109"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.018047" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:51.018127" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:51.017554" elapsed="0.000598"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:51.018735" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:51.018445" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:51.018224" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:51.018205" 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-10T00:47:51.019086" 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-10T00:47:51.019276" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:51.019346" 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-10T00:47:51.008642" elapsed="0.010846">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:51.008409" elapsed="0.011152">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:51.008268" elapsed="0.011349">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:51.007815" 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-10T00:47:51.019957" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:50.982333" elapsed="0.037743">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:52.045513" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:47:52.045828" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:52.044857" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:52.044381" elapsed="0.001611"/>
</kw>
<msg time="2026-04-10T00:47:52.046038" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:52.036221" elapsed="0.009861"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:52.035757" elapsed="0.010399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.046604" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:52.046348" 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-10T00:47:52.053293" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:52.052894" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.053773" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:52.053480" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:52.053862" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:47:52.054027" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:52.052506" 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-10T00:47:52.054205" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.054882" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:52.054523" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.055335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:52.055088" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.055750" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:52.055507" 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-10T00:47:52.056192" 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-10T00:47:52.056445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:52.056300" 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-10T00:47:52.056667" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:52.056526" 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-10T00:47:52.056899" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:52.056745" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:52.056280" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:52.056025" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:52.055825" elapsed="0.001200"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:52.057065" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:52.057266" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:52.057313" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:52.051769" elapsed="0.005568"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.057861" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:52.057941" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:52.057574" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:52.058533" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:52.058251" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:52.058035" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:52.058017" 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-10T00:47:52.058866" 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-10T00:47:52.059054" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:52.059122" 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-10T00:47:52.047675" elapsed="0.011554">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:52.047441" elapsed="0.011858">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:52.047301" elapsed="0.012053">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:52.046891" elapsed="0.012554">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:52.059676" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:52.020952" elapsed="0.038841">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:53.085664" elapsed="0.000273"/>
</kw>
<msg time="2026-04-10T00:47:53.086013" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:53.084951" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:53.084317" elapsed="0.001851"/>
</kw>
<msg time="2026-04-10T00:47:53.086214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:53.076164" elapsed="0.010096"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:53.075690" elapsed="0.010645"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.086821" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:53.086548" 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-10T00:47:53.092451" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:53.092018" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.093065" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:53.092756" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:53.093141" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:53.093306" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:53.091602" elapsed="0.001729"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:53.093483" elapsed="0.000353"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.094347" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:53.094010" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.094917" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:53.094614" elapsed="0.000334"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.095342" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:53.095100" 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-10T00:47:53.095774" 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-10T00:47:53.096051" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:53.095902" 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-10T00:47:53.096272" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:53.096132" 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-10T00:47:53.096489" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:53.096348" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:53.095881" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:53.095606" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:53.095416" elapsed="0.001199"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:53.096657" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:53.096874" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:53.096921" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:53.090767" elapsed="0.006178"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.097386" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:53.097464" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:53.097114" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:53.098287" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:53.097772" elapsed="0.000591">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:53.097556" elapsed="0.000875">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:53.097538" 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-10T00:47:53.098615" elapsed="0.000098"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:53.098924" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:53.098993" 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-10T00:47:53.088046" elapsed="0.011057">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:53.087772" elapsed="0.011400">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:53.087602" elapsed="0.011624">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:53.087134" elapsed="0.012181">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:53.099548" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:53.060569" elapsed="0.039096">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:54.125066" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:47:54.125399" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:54.124386" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:54.123905" elapsed="0.001744"/>
</kw>
<msg time="2026-04-10T00:47:54.125698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:54.115760" elapsed="0.009985"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:54.115291" elapsed="0.010530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.126323" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:54.126038" 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-10T00:47:54.131539" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:54.131117" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.132053" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:54.131733" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:54.132130" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:47:54.132298" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:54.130717" 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-10T00:47:54.132479" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.133174" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:54.132807" elapsed="0.000394"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.133878" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:54.133358" elapsed="0.000568"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.134402" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:54.134096" 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-10T00:47:54.134893" 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-10T00:47:54.135167" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:54.135016" 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-10T00:47:54.135389" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:54.135249" 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-10T00:47:54.135608" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:54.135467" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:54.134995" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:54.134689" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:54.134485" elapsed="0.001253"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:54.135781" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:54.136022" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:54.136071" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:54.129960" elapsed="0.006136"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.136561" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:54.136639" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:54.136272" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:54.137278" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:54.136984" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:54.136734" elapsed="0.000769">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:54.136715" elapsed="0.000823">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:54.137695" 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-10T00:47:54.137894" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:54.137968" 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-10T00:47:54.127422" elapsed="0.010658">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:54.127182" elapsed="0.010971">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:54.127036" elapsed="0.011174">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:54.126606" 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-10T00:47:54.138566" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:54.100527" elapsed="0.038158">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:55.162196" elapsed="0.000291"/>
</kw>
<msg time="2026-04-10T00:47:55.162568" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:55.161368" elapsed="0.001277"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:55.160778" elapsed="0.001965"/>
</kw>
<msg time="2026-04-10T00:47:55.162800" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:55.150757" elapsed="0.012116"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:55.150225" elapsed="0.012744"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.163529" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:55.163224" 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-10T00:47:55.170177" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:55.169661" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.170754" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:55.170418" elapsed="0.000366"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:55.170855" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:47:55.171049" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:55.169198" elapsed="0.001879"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:55.171253" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.172068" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:55.171637" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.172582" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:55.172303" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.173077" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:55.172782" 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-10T00:47:55.173626" 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-10T00:47:55.174099" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:55.173916" 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-10T00:47:55.174377" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:55.174202" 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-10T00:47:55.174634" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:55.174467" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:55.173855" elapsed="0.000865"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:55.173410" elapsed="0.001339"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:55.173172" elapsed="0.001609"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:55.174828" elapsed="0.000062"/>
</return>
<msg time="2026-04-10T00:47:55.175111" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:55.175168" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:55.168323" elapsed="0.006874"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.175768" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:55.175872" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:55.175417" elapsed="0.000484"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:55.176598" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:55.176252" elapsed="0.000440">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:55.175981" elapsed="0.000791">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:55.175960" elapsed="0.000847">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:55.177019" 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-10T00:47:55.177222" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:55.177301" 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-10T00:47:55.164869" elapsed="0.012569">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:55.164555" elapsed="0.012964">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:55.164381" elapsed="0.013200">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:55.163894" elapsed="0.013794">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:55.178013" elapsed="0.000030"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:55.139381" elapsed="0.038773">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:56.204328" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:47:56.204653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:56.203652" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:56.203186" elapsed="0.001618"/>
</kw>
<msg time="2026-04-10T00:47:56.204867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:56.195040" elapsed="0.009875"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:56.194552" elapsed="0.010528"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.205561" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:56.205279" 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-10T00:47:56.210684" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:56.210290" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.211206" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:56.210908" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:56.211282" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:56.211445" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:56.209916" 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-10T00:47:56.211622" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.212296" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:56.211956" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.212739" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:56.212493" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.213174" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:56.212931" 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-10T00:47:56.213637" 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-10T00:47:56.213917" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:56.213752" 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-10T00:47:56.214143" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:56.214002" 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-10T00:47:56.214362" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:56.214221" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:56.213732" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:56.213436" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:56.213250" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:56.214543" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:56.214750" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:56.214797" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:56.209156" elapsed="0.005664"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.215286" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:56.215365" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:56.215010" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:56.216174" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:56.215875" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:56.215458" elapsed="0.000868">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:56.215439" 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-10T00:47:56.216513" 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-10T00:47:56.216686" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:56.216752" 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-10T00:47:56.206648" elapsed="0.010286">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:56.206413" elapsed="0.010607">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:56.206263" 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-10T00:47:56.205855" elapsed="0.011315">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:56.217408" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:56.179073" elapsed="0.038478">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:57.243548" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:47:57.243872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:57.242886" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:57.242405" elapsed="0.001620"/>
</kw>
<msg time="2026-04-10T00:47:57.244072" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:57.234297" elapsed="0.009820"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:57.233874" elapsed="0.010317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.244641" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:57.244381" 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-10T00:47:57.249940" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:57.249532" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.250426" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:57.250126" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:57.250500" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:57.250658" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:57.249160" 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-10T00:47:57.250835" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.251509" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:57.251170" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.251958" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:57.251692" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.252365" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:57.252127" 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-10T00:47:57.252784" 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-10T00:47:57.253055" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:57.252909" 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-10T00:47:57.253287" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:57.253148" elapsed="0.000264"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:57.253581" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:57.253438" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:57.252889" elapsed="0.000767"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:57.252618" elapsed="0.001062"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:57.252436" elapsed="0.001269"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:57.253744" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:57.253961" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:57.254013" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:57.248398" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.254481" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:57.254560" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:57.254208" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:57.255174" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:57.254890" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:57.254657" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:57.254639" 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-10T00:47:57.255495" 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-10T00:47:57.255665" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:57.255730" 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-10T00:47:57.245720" elapsed="0.010117">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:57.245486" elapsed="0.010437">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:57.245343" elapsed="0.010636">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:57.244931" elapsed="0.011138">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:57.256299" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:57.218402" elapsed="0.038012">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:58.284087" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:47:58.284424" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:58.283390" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:58.282837" elapsed="0.001734"/>
</kw>
<msg time="2026-04-10T00:47:58.284617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:58.273556" elapsed="0.011106"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:58.272965" elapsed="0.011793"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.285329" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:58.285015" elapsed="0.000366"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.290653" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:58.290242" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.291185" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:58.290859" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:58.291262" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:47:58.291428" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:58.289748" 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-10T00:47:58.291608" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.292312" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:58.291946" elapsed="0.000394"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.292768" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:58.292499" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.293216" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:58.292961" 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-10T00:47:58.293644" 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-10T00:47:58.293917" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:58.293755" 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-10T00:47:58.294152" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:58.294008" 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-10T00:47:58.294373" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:58.294232" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:58.293734" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:58.293474" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:58.293291" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:58.294539" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:58.294744" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:58.294792" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:58.289030" elapsed="0.005787"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.295295" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:58.295375" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:58.295015" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:58.296219" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:58.295918" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:58.295668" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:58.295451" elapsed="0.000943">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:58.296550" 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-10T00:47:58.296738" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:58.296807" 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-10T00:47:58.286479" elapsed="0.010454">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:58.286244" elapsed="0.010771">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:58.286101" elapsed="0.010973">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:58.285669" 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-10T00:47:58.297446" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:58.257347" elapsed="0.040219">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.322769" elapsed="0.000274"/>
</kw>
<msg time="2026-04-10T00:47:59.323114" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.322108" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:59.321588" elapsed="0.001674"/>
</kw>
<msg time="2026-04-10T00:47:59.323308" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.313462" elapsed="0.009890"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:47:59.312908" elapsed="0.010547"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.323939" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:59.323662" 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-10T00:47:59.329195" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.328789" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.329671" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.329383" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.329746" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:59.329921" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.328420" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:47:59.330097" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.330750" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.330413" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.331190" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.330945" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.331603" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.331362" 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-10T00:47:59.332038" 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-10T00:47:59.332291" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.332146" 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-10T00:47:59.332524" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.332384" 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-10T00:47:59.332741" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.332602" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.332126" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.331872" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.331675" elapsed="0.001204"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:47:59.332984" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:59.333195" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:47:59.333241" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:47:59.327675" elapsed="0.005590"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.333710" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:59.333786" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:59.333440" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.334387" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.334110" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:47:59.333894" elapsed="0.000631">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:47:59.333875" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.334705" 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-10T00:47:59.334889" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.334956" 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-10T00:47:59.325033" elapsed="0.010029">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:47:59.324782" elapsed="0.010349">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:47:59.324638" elapsed="0.010546">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.324214" elapsed="0.011060">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.335502" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.298379" elapsed="0.037238">No leader found.</status>
</kw>
<msg time="2026-04-10T00:47:59.335703" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.818341" elapsed="90.517457">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.816181" elapsed="90.519739">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:46:28.804610" elapsed="90.531459">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s1-s2-t25" name="Check Entity Owner Status After Recover" line="126">
<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-10T00:47:59.339283" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:47:59.339019" 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-10T00:47:59.340633" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.340523" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.340504" 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-10T00:47:59.345228" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.345122" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.345104" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.346404" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.345975" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.347056" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.346609" elapsed="0.000474"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.347127" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:59.347331" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.345516" elapsed="0.001840"/>
</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-10T00:47:59.347696" 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-10T00:47:59.347950" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.347793" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.347776" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.347557" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.347408" 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-10T00:47:59.344751" elapsed="0.003376"/>
</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-10T00:47:59.340222" elapsed="0.007959"/>
</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-10T00:47:59.339701" elapsed="0.008523"/>
</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-10T00:47:59.336836" elapsed="0.011439"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:47:59.359225" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.355530" elapsed="0.003735">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.359446" elapsed="0.000033"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.336286" elapsed="0.023318">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t26" name="Create Bridge Manually and Verify After Recover" 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-10T00:47:59.364276" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:47:59.364012" 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-10T00:47:59.365547" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.365436" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.365418" 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-10T00:47:59.370179" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.370072" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.370054" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.371238" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.370838" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.371705" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.371420" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.371775" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:47:59.371944" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.370468" 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-10T00:47:59.372307" elapsed="0.000045"/>
</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-10T00:47:59.372571" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.372430" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.372413" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.372169" elapsed="0.000499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.372021" elapsed="0.000672"/>
</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-10T00:47:59.369701" elapsed="0.003043"/>
</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-10T00:47:59.365153" elapsed="0.007686"/>
</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-10T00:47:59.364711" elapsed="0.008190"/>
</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-10T00:47:59.360415" elapsed="0.012538"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.380726" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.380455" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.380437" elapsed="0.000370"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.381129" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:47:59.381230" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.380968" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.381785" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:59.381405" elapsed="0.000426"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.382375" level="INFO">${conn_id} = 35</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.382003" elapsed="0.000398"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.383450" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:59.383527" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:59.383180" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.383707" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.384998" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:47:59.385287" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.384660" elapsed="0.001115">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.385833" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.384211" elapsed="0.001688"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.382615" elapsed="0.003389">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.386175" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.386347" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.386523" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.386647" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.386606" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.386589" elapsed="0.000122"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.386805" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.386769" elapsed="0.000092"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.386748" elapsed="0.000136"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.386915" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.389476" elapsed="0.000315"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.389971" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.390272" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:47:59.387233" elapsed="0.003192"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.379914" elapsed="0.010586">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.390596" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.379337" elapsed="0.011308"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.378794" elapsed="0.011948">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.390945" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.391138" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.391331" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.391532" elapsed="0.000020"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.376763" elapsed="0.014886">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.359832" elapsed="0.031949">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t27" name="Add Port Manually and Verify After Recover" 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-10T00:47:59.395483" elapsed="0.000289"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:47:59.395122" elapsed="0.000747"/>
</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-10T00:47:59.397273" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.397114" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.397085" elapsed="0.000283"/>
</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-10T00:47:59.403223" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.403110" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.403092" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.404464" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.403937" elapsed="0.000555"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.404959" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.404653" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.405032" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:47:59.405191" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.403516" elapsed="0.001701"/>
</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-10T00:47:59.405565" 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-10T00:47:59.405803" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.405661" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.405644" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.405426" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.405272" 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-10T00:47:59.402735" elapsed="0.003265"/>
</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-10T00:47:59.396690" elapsed="0.009366"/>
</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-10T00:47:59.396078" elapsed="0.010023"/>
</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-10T00:47:59.392544" elapsed="0.013613"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.414098" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.413803" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.413783" elapsed="0.000398"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.414482" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:47:59.414587" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.414330" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.415167" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:59.414766" elapsed="0.000449"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.415740" level="INFO">${conn_id} = 37</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.415375" elapsed="0.000392"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.416688" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:59.416768" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:59.416411" elapsed="0.000382"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.416967" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.418157" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:47:59.418448" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.417825" elapsed="0.001104">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.418988" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.417464" elapsed="0.001576"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.415998" elapsed="0.003148">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.419319" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.419493" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.419674" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.420012" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.419965" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.419742" elapsed="0.000340"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.420172" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.420135" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.420120" elapsed="0.000114"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.420264" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.422873" elapsed="0.000316"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.423351" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.423646" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:47:59.420596" elapsed="0.003202"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.413280" elapsed="0.010608">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.423945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.412686" elapsed="0.011306"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.412077" elapsed="0.012064">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.424363" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.424561" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.424758" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.424979" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.410025" elapsed="0.015074">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.391992" elapsed="0.033250">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t28" name="Delete the Bridge Manually and Verify After Recover" 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-10T00:47:59.428379" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:47:59.428101" 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-10T00:47:59.429653" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.429537" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.429517" 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-10T00:47:59.434316" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.434210" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.434193" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.435555" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.435166" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.436049" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.435743" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.436122" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:47:59.436282" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.434768" elapsed="0.001565"/>
</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-10T00:47:59.436691" 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-10T00:47:59.436946" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.436787" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.436770" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.436550" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.436392" 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-10T00:47:59.433853" elapsed="0.003275"/>
</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-10T00:47:59.429249" elapsed="0.007933"/>
</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-10T00:47:59.428799" elapsed="0.008428"/>
</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-10T00:47:59.426031" elapsed="0.011247"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.445296" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.445026" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.445007" elapsed="0.000417"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.445717" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:47:59.445819" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.445574" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.446398" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:47:59.446015" elapsed="0.000429"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.447125" level="INFO">${conn_id} = 39</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.446600" elapsed="0.000556"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.448056" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:47:59.448134" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:47:59.447760" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.448337" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:47:59.449511" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:47:59.449772" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.449199" elapsed="0.001036">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.450293" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.448823" elapsed="0.001519"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.447370" elapsed="0.003075">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.450617" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.450790" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.450982" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.451108" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.451068" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.451050" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.451257" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.451221" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.451207" elapsed="0.000111"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.451348" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:47:59.454044" elapsed="0.000310"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.454516" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:47:59.454809" elapsed="0.000116"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:47:59.451656" elapsed="0.003321"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.444490" elapsed="0.010561">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:47:59.455105" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.443920" elapsed="0.011231"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.443415" elapsed="0.011831">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.455478" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:47:59.455676" elapsed="0.000020"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.441364" elapsed="0.014429">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.425453" elapsed="0.030489">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-s2-t29" name="Verify Modified Port After Recover" line="145">
<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-10T00:47:59.458908" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:47:59.458636" 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-10T00:47:59.460146" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.460037" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.460018" 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-10T00:47:59.464912" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:47:59.464788" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:47:59.464769" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.465975" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:47:59.465575" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.466459" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:47:59.466166" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:47:59.466532" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:47:59.466687" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:47:59.465203" elapsed="0.001509"/>
</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-10T00:47:59.467072" 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-10T00:47:59.467309" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:47:59.467168" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:47:59.467152" elapsed="0.000231"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:47:59.466932" elapsed="0.000474"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:47:59.466765" 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-10T00:47:59.464412" elapsed="0.003071"/>
</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-10T00:47:59.459738" elapsed="0.007800"/>
</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-10T00:47:59.459320" elapsed="0.008263"/>
</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-10T00:47:59.456636" elapsed="0.011001"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:47:59.474107" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:47:59.473739" elapsed="0.000396"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:47:59.486275" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.482477" elapsed="0.003837">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:00.504028" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:00.500150" elapsed="0.003933">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:01.528112" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:01.523273" elapsed="0.004896">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:02.546842" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:02.543042" elapsed="0.003862">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:03.566092" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:03.562242" elapsed="0.003904">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:04.583466" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.579632" elapsed="0.003887">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:48:04.583633" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:47:59.474323" elapsed="5.109458">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.471709" elapsed="5.112220">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:47:59.456142" elapsed="5.127948">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t30" name="Delete Port In New Owner After Recover" 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-10T00:48:04.587237" elapsed="0.000258"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.586965" 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-10T00:48:04.588620" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.588485" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.588461" elapsed="0.000232"/>
</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-10T00:48:04.593540" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.593417" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.593396" elapsed="0.000215"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.594671" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.594244" elapsed="0.000455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.595166" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.594874" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.595237" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:04.595395" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.593857" elapsed="0.001563"/>
</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-10T00:48:04.595777" 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-10T00:48:04.596036" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.595891" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.595873" elapsed="0.000302"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.595636" elapsed="0.000563"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.595477" elapsed="0.000749"/>
</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-10T00:48:04.592954" 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-10T00:48:04.588186" elapsed="0.008165"/>
</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-10T00:48:04.587710" elapsed="0.008686"/>
</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-10T00:48:04.584930" elapsed="0.011517"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:04.607596" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.604077" elapsed="0.003558">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.584323" elapsed="0.023448">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t31" name="Delete Bridge In New Owner And Verify After Recover" 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-10T00:48:04.611111" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.610830" 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-10T00:48:04.612363" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.612252" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.612233" 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-10T00:48:04.617016" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.616907" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.616889" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.618068" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.617671" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.618558" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.618254" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.618629" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:04.618781" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.617302" elapsed="0.001503"/>
</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-10T00:48:04.619163" 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-10T00:48:04.619406" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.619260" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.619243" elapsed="0.000253"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.619023" elapsed="0.000497"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.618870" 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-10T00:48:04.616534" elapsed="0.003062"/>
</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-10T00:48:04.611967" elapsed="0.007684"/>
</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-10T00:48:04.611531" elapsed="0.008163"/>
</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-10T00:48:04.608584" elapsed="0.011161"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:04.631095" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.627539" elapsed="0.003596">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.608048" elapsed="0.023222">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s1-s2-t32" name="Create Bridge In Old Candidate and Verify After Recover" 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-10T00:48:04.634621" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.634331" elapsed="0.000577"/>
</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-10T00:48:04.635888" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.635760" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.635742" 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-10T00:48:04.640540" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.640432" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.640414" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.641598" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.641214" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.642089" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.641784" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.642160" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:04.642313" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.640826" elapsed="0.001512"/>
</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-10T00:48:04.642695" 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-10T00:48:04.642949" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.642790" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.642774" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.642555" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.642405" elapsed="0.000667"/>
</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-10T00:48:04.640072" 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-10T00:48:04.635478" elapsed="0.007700"/>
</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-10T00:48:04.635058" elapsed="0.008163"/>
</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-10T00:48:04.632144" elapsed="0.011129"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:04.655011" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.651066" elapsed="0.003985">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.631512" elapsed="0.023671">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t33" name="Create Port In Old Owner and Verify After Recover" line="161">
<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-10T00:48:04.658455" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.658166" 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-10T00:48:04.659687" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.659578" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.659560" 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-10T00:48:04.664293" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.664185" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.664167" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.665352" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.664972" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.665821" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.665536" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.665947" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:04.666104" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.664581" 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-10T00:48:04.666484" 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-10T00:48:04.666724" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.666582" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.666565" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.666328" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.666180" elapsed="0.000681"/>
</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-10T00:48:04.663817" 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-10T00:48:04.659295" elapsed="0.007675"/>
</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-10T00:48:04.658883" elapsed="0.008130"/>
</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-10T00:48:04.656035" elapsed="0.011028"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:04.678613" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.674793" elapsed="0.003858">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.655458" elapsed="0.023326">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t34" name="Modify the destination IP of Port In Old Owner After Recover" line="165">
<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-10T00:48:04.682072" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.681789" 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-10T00:48:04.683341" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.683232" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.683214" 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-10T00:48:04.688102" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.687994" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.687975" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.689153" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.688758" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.689622" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.689336" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.689694" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:04.689868" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.688390" 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-10T00:48:04.690256" 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-10T00:48:04.690515" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.690370" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.690336" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.690113" elapsed="0.000500"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.689962" elapsed="0.000676"/>
</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-10T00:48:04.687619" 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-10T00:48:04.682946" elapsed="0.007836"/>
</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-10T00:48:04.682516" elapsed="0.008311"/>
</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-10T00:48:04.679636" elapsed="0.011260"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:04.698815" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.694960" elapsed="0.003910">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.679076" elapsed="0.019929">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t35" name="Verify Port Is Modified After Recover" line="169">
<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-10T00:48:04.703806" elapsed="0.000233"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:04.703543" elapsed="0.000552"/>
</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-10T00:48:04.705116" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.705001" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.704981" 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-10T00:48:04.709778" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:04.709671" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:04.709653" elapsed="0.000216"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.710924" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:04.710525" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.711395" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:04.711110" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:04.711472" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:04.711624" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:04.710125" elapsed="0.001523"/>
</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-10T00:48:04.712001" 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-10T00:48:04.712239" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:04.712097" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:04.712081" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:04.711861" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:04.711701" elapsed="0.000660"/>
</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-10T00:48:04.709313" elapsed="0.003101"/>
</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-10T00:48:04.704687" elapsed="0.007783"/>
</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-10T00:48:04.704245" elapsed="0.008267"/>
</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-10T00:48:04.699787" elapsed="0.012775"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:48:04.718904" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:48:04.718529" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:04.731011" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.727257" elapsed="0.003793">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:05.752449" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:05.748577" elapsed="0.003937">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:06.771507" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:06.766536" elapsed="0.005031">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:07.789340" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:07.785415" elapsed="0.003990">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:08.809576" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:08.804151" elapsed="0.005497">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:09.827818" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.823986" elapsed="0.003905">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:48:09.828012" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:48:04.719121" elapsed="5.109038">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.716446" elapsed="5.111846">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:04.699285" elapsed="5.129182">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s1-s2-t36" name="Delete Port In Old Owner After Recover" 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-10T00:48:09.831965" elapsed="0.000257"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:09.831663" 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-10T00:48:09.833393" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.833254" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.833231" 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-10T00:48:09.838442" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.838313" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.838287" elapsed="0.000227"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.839625" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:09.839200" elapsed="0.000455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.840202" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:09.839819" elapsed="0.000410"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:09.840275" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:48:09.840455" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:09.838769" elapsed="0.001711"/>
</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-10T00:48:09.840859" 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-10T00:48:09.841170" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:09.840959" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:09.840942" elapsed="0.000320"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:09.840699" elapsed="0.000587"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.840539" elapsed="0.000774"/>
</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-10T00:48:09.837889" elapsed="0.003480"/>
</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-10T00:48:09.832947" elapsed="0.008476"/>
</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-10T00:48:09.832471" elapsed="0.008996"/>
</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-10T00:48:09.829556" elapsed="0.011962"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:09.853950" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.849746" elapsed="0.004245">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.828974" elapsed="0.025188">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t37" name="Delete Bridge In Old Owner And Verify After Recover" 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-10T00:48:09.857436" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:09.857158" elapsed="0.000555"/>
</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-10T00:48:09.858798" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.858686" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.858668" 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-10T00:48:09.863516" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.863399" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.863381" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.864610" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:09.864209" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.865100" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:09.864795" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:09.865172" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:09.865324" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:09.863819" elapsed="0.001530"/>
</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-10T00:48:09.865692" 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-10T00:48:09.865991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:09.865810" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:09.865789" elapsed="0.000279"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:09.865549" elapsed="0.000542"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.865402" elapsed="0.000714"/>
</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-10T00:48:09.863027" 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-10T00:48:09.858336" elapsed="0.007887"/>
</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-10T00:48:09.857885" elapsed="0.008383"/>
</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-10T00:48:09.855130" elapsed="0.011189"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:09.878246" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.874354" elapsed="0.003931">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.854511" elapsed="0.023963">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s1-s2-t38" name="Cleans Up Test Environment For Next Suite" line="181">
<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-10T00:48:09.881627" elapsed="0.000238"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:09.881371" 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-10T00:48:09.882939" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.882783" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.882764" elapsed="0.000293"/>
</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-10T00:48:09.887675" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.887555" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.887537" elapsed="0.000215"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.889159" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:09.888368" elapsed="0.000819"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.889668" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:09.889368" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:09.889741" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:09.889918" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:09.887999" elapsed="0.001945"/>
</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-10T00:48:09.890307" 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-10T00:48:09.890545" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:09.890405" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:09.890388" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:09.890168" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.890002" elapsed="0.000667"/>
</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-10T00:48:09.887197" elapsed="0.003527"/>
</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-10T00:48:09.882497" elapsed="0.008283"/>
</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-10T00:48:09.882069" elapsed="0.008755"/>
</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-10T00:48:09.879334" elapsed="0.011558"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.895984" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:09.895683" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.895663" elapsed="0.000437"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:09.896465" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:09.896571" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:09.896263" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.897147" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:09.896749" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:09.897719" level="INFO">${conn_id} = 41</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:09.897351" elapsed="0.000397"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.898694" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:09.898771" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:09.898418" elapsed="0.000377"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:09.898967" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:09.900137" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:09.900477" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.899807" elapsed="0.001196">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:09.901071" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.899452" elapsed="0.001672"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.897977" elapsed="0.003253">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.901406" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.901578" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.901759" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.901905" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.901862" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:09.901829" elapsed="0.000140"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.902054" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.902019" elapsed="0.000074"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:09.902004" elapsed="0.000110"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:09.902143" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:09.904883" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:09.905353" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:09.905643" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:09.902454" elapsed="0.003341"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.895124" elapsed="0.010764">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:09.905944" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.894555" elapsed="0.011436"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.894071" elapsed="0.012020">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.906270" elapsed="0.000025"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:48:09.893703" elapsed="0.012680">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.906576" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.906784" elapsed="0.000022"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.907005" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.907209" elapsed="0.000023"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.893323" elapsed="0.013995">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.907539" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:09.907735" elapsed="0.000020"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.891104" elapsed="0.016760">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="FAIL" start="2026-04-10T00:48:09.878766" elapsed="0.029227">OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-10T00:48:09.908728" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-10T00:48:09.908646" elapsed="0.000133"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Candidate failover and recover</doc>
<status status="FAIL" start="2026-04-10T00:46:22.997547" elapsed="106.911265"/>
</suite>
<status status="FAIL" start="2026-04-10T00:44:35.362268" elapsed="214.547720"/>
</suite>
<suite id="s1-s2" name="Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster">
<suite id="s1-s2-s1" name="Ovsdb Southbound Cluster" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster/010__Ovsdb_Southbound_Cluster.robot">
<kw name="Suite Setup" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.990699" 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-10T00:48:09.986599" elapsed="0.004156"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-10T00:48:09.986378" elapsed="0.004449"/>
</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-10T00:48:09.995525" 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-10T00:48:09.992009" elapsed="0.003544"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-10T00:48:09.995752" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:09.995635" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:09.995612" elapsed="0.000208"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.996462" 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-10T00:48:09.995989" elapsed="0.000557"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.997076" 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-10T00:48:09.996731" elapsed="0.000372"/>
</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-10T00:48:09.997612" elapsed="0.000307"/>
</kw>
<msg time="2026-04-10T00:48:09.998017" level="INFO">${status} = PASS</msg>
<msg time="2026-04-10T00:48:09.998065" 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-10T00:48:09.997267" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.998628" 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-10T00:48:09.998253" elapsed="0.000401"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:09.999621" 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-10T00:48:09.999360" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.000077" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:09.999797" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.000575" 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-10T00:48:10.000257" 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-10T00:48:10.002946" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.002745" elapsed="0.000273"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.000658" elapsed="0.002387"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.003600" 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-10T00:48:10.003204" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.004217" 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-10T00:48:10.003801" elapsed="0.000458"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.004810" 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-10T00:48:10.004429" elapsed="0.000439"/>
</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-10T00:48:09.998917" elapsed="0.006082"/>
</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-10T00:48:09.991640" elapsed="0.013422"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.005243" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.005128" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.005109" elapsed="0.000201"/>
</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-10T00:48:10.008432" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.008029" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.008924" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.008617" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.008995" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:48:10.009156" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.007685" elapsed="0.001496"/>
</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-10T00:48:10.009512" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.009341" elapsed="0.000230"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.009233" elapsed="0.000364"/>
</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-10T00:48:10.005529" elapsed="0.004121"/>
</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-10T00:48:10.009800" elapsed="0.000225"/>
</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-10T00:48:10.010328" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.010194" elapsed="0.000197"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.010077" elapsed="0.000339"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-10T00:48:09.991164" elapsed="0.019307"/>
</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-10T00:48:10.012988" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.012877" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.012857" 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-10T00:48:10.017537" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.017430" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.017412" elapsed="0.000223"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.018636" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.018240" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.019121" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.018820" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.019192" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:10.019344" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.017902" elapsed="0.001467"/>
</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-10T00:48:10.019704" 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-10T00:48:10.019979" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.019813" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.019794" elapsed="0.000265"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.019566" elapsed="0.000518"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.019419" elapsed="0.000729"/>
</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-10T00:48:10.017147" elapsed="0.003065"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-10T00:48:10.011057" elapsed="0.009214"/>
</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-10T00:48:10.010630" elapsed="0.009685"/>
</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-10T00:48:09.986068" elapsed="0.034351"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.021397" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-10T00:48:10.021040" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-10T00:48:10.021608" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-10T00:48:10.021503" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.021484" elapsed="0.000210"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.021866" elapsed="0.000024"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.022054" elapsed="0.000021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.022234" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.022463" elapsed="0.000026"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.022729" elapsed="0.000026"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-10T00:48:10.020701" elapsed="0.002121"/>
</kw>
<status status="PASS" start="2026-04-10T00:48:09.985764" elapsed="0.037126"/>
</kw>
<test id="s1-s2-s1-t1" name="Check Shards Status Before Fail" line="17">
<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-10T00:48:10.026031" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.025751" 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-10T00:48:10.027290" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.027178" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.027159" 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-10T00:48:10.031919" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.031798" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.031780" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.033045" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.032614" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.033514" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.033229" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.033586" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:10.033737" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.032205" 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-10T00:48:10.034124" 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-10T00:48:10.034363" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.034221" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.034204" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.033983" elapsed="0.000477"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.033813" 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-10T00:48:10.031441" elapsed="0.003095"/>
</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-10T00:48:10.026889" elapsed="0.007742"/>
</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-10T00:48:10.026446" elapsed="0.008230"/>
</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-10T00:48:10.023519" elapsed="0.011210"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.054482" elapsed="0.000225"/>
</kw>
<msg time="2026-04-10T00:48:10.054757" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.053840" elapsed="0.000969"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:10.053380" elapsed="0.001521"/>
</kw>
<msg time="2026-04-10T00:48:10.054948" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.045374" elapsed="0.009619"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:10.044990" elapsed="0.010077"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.055512" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.055254" 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-10T00:48:10.060872" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.060460" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.061359" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.061062" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.061431" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:10.061595" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.060064" 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-10T00:48:10.061779" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.062465" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.062118" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.062924" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.062651" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.063343" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.063098" 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-10T00:48:10.063760" 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-10T00:48:10.064027" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.063882" 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-10T00:48:10.064246" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.064107" 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-10T00:48:10.064484" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.064340" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.063862" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.063594" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.063417" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:10.064697" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:48:10.064933" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:10.064981" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:10.059336" elapsed="0.005670"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.065475" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.065555" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.065179" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.066173" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.065889" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:10.065650" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:10.065630" 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-10T00:48:10.066498" 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-10T00:48:10.066672" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.066737" 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-10T00:48:10.056792" elapsed="0.010070">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:10.056302" elapsed="0.010634">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:10.056173" elapsed="0.010820">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.055775" 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-10T00:48:10.067318" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.034960" elapsed="0.032475">No leader found.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.022945" elapsed="0.044628">No leader found.</status>
</test>
<test id="s1-s2-s1-t2" name="Start OVS Multiple Connections" line="21">
<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-10T00:48:10.072243" elapsed="0.000246"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.071970" 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-10T00:48:10.073612" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.073491" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.073470" 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-10T00:48:10.078309" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.078201" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.078183" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.079393" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.078985" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.079928" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.079582" elapsed="0.000373"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.080001" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:10.080155" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.078598" elapsed="0.001582"/>
</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-10T00:48:10.080572" 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-10T00:48:10.080871" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.080713" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.080694" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.080431" elapsed="0.000542"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.080233" elapsed="0.000765"/>
</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-10T00:48:10.077827" elapsed="0.003224"/>
</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-10T00:48:10.073190" elapsed="0.007915"/>
</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-10T00:48:10.072712" elapsed="0.008437"/>
</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-10T00:48:10.068470" elapsed="0.012731"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.088511" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.088091" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.089016" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.088701" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.089089" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:10.089247" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${controller_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.087695" elapsed="0.001577"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.091945" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.091639" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.091453" elapsed="0.000580"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.092388" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.092506" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.092184" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.093175" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.092690" elapsed="0.000543"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.093888" level="INFO">${conn_id} = 43</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.093429" elapsed="0.000494"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.094992" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.095077" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.094666" elapsed="0.000437"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.095264" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.096503" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.096805" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.096159" elapsed="0.001151">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.097371" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.095772" elapsed="0.001652"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.094186" elapsed="0.003353">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.097717" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.097958" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.098147" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.098287" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.098244" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.098224" elapsed="0.000130"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.098448" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.098409" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.098393" elapsed="0.000120"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.098545" elapsed="0.000015"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.101190" elapsed="0.000330"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.101687" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.102007" elapsed="0.000107"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.098893" elapsed="0.003275"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.090922" elapsed="0.011330">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.102309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.090338" elapsed="0.012018"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.089828" elapsed="0.012628">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.102640" elapsed="0.000024"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:48:10.089475" elapsed="0.013285">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.102939" elapsed="0.000023"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.103206" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.103381" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.103077" elapsed="0.000356"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.103014" elapsed="0.000445"/>
</for>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.103649" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.103838" elapsed="0.000036"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.104033" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.104201" elapsed="0.000022"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.104724" elapsed="0.000036"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.104949" elapsed="0.000023"/>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.105025" elapsed="0.000021"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.085432" elapsed="0.019718">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.105390" elapsed="0.000032"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.067911" elapsed="0.037677">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10T00:48:10.109528" elapsed="0.000244"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.109231" elapsed="0.000600"/>
</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-10T00:48:10.110890" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.110753" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.110732" 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-10T00:48:10.115545" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.115433" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.115414" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.116679" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.116236" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.117192" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.116887" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.117269" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:48:10.117434" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.115839" elapsed="0.001621"/>
</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-10T00:48:10.117831" elapsed="0.000041"/>
</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-10T00:48:10.118106" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.117956" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.117936" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.117677" elapsed="0.000535"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.117514" elapsed="0.000724"/>
</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-10T00:48:10.115069" elapsed="0.003224"/>
</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-10T00:48:10.110455" elapsed="0.007895"/>
</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-10T00:48:10.110003" elapsed="0.008394"/>
</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-10T00:48:10.106690" elapsed="0.011763"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:10.129645" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.125827" elapsed="0.003862">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.129912" elapsed="0.000026"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.130126" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.130322" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.130512" elapsed="0.000022"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.106000" elapsed="0.024671">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t4" name="Create Bridge Manually and Verify Before Fail" 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-10T00:48:10.134719" elapsed="0.000288"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.134406" elapsed="0.000663"/>
</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-10T00:48:10.136232" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.136097" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.136076" elapsed="0.000281"/>
</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-10T00:48:10.141099" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.140938" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.140918" elapsed="0.000258"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.142224" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.141804" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.142718" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.142414" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.142793" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:10.142976" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.141415" elapsed="0.001588"/>
</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-10T00:48:10.143358" 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-10T00:48:10.143605" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.143459" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.143441" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.143214" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.143058" 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-10T00:48:10.140549" elapsed="0.003239"/>
</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-10T00:48:10.135738" elapsed="0.008122"/>
</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-10T00:48:10.135257" elapsed="0.008653"/>
</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-10T00:48:10.131692" elapsed="0.012271"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.151973" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.151668" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.151649" elapsed="0.000407"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.152389" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.152500" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.152208" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.153178" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.152754" elapsed="0.000474"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.153771" level="INFO">${conn_id} = 45</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.153390" elapsed="0.000410"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.154934" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.155020" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.154611" elapsed="0.000435"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.155212" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.156475" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.156769" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.156126" elapsed="0.001150">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.157336" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.155730" elapsed="0.001662"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.154035" elapsed="0.003514">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.157732" elapsed="0.000025"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.157931" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.158118" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.158252" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.158210" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.158190" elapsed="0.000132"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.158416" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.158378" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.158361" elapsed="0.000120"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.158513" elapsed="0.000015"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.161202" elapsed="0.000309"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.161673" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.161981" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.158856" elapsed="0.003279"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.151129" elapsed="0.011079">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.162263" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.150535" elapsed="0.011774"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.150025" elapsed="0.012380">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.162591" elapsed="0.000021"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.162783" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.162990" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.163189" elapsed="0.000020"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.147934" elapsed="0.015370">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.131076" elapsed="0.032361">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t5" name="Add Port Manually and Verify Before Fail" line="40">
<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-10T00:48:10.166646" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.166386" 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-10T00:48:10.167914" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.167784" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.167765" 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-10T00:48:10.172690" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.172582" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.172563" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.173765" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.173380" elapsed="0.000455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.174309" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.174016" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.174383" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:10.174540" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.173004" elapsed="0.001561"/>
</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-10T00:48:10.174928" 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-10T00:48:10.175171" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.175027" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.175010" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.174772" elapsed="0.000500"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.174619" 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-10T00:48:10.172211" elapsed="0.003140"/>
</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-10T00:48:10.167500" elapsed="0.007907"/>
</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-10T00:48:10.167078" elapsed="0.008373"/>
</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-10T00:48:10.164399" elapsed="0.011105"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.183283" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.183019" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.183001" elapsed="0.000363"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.183644" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.183745" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.183509" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.184329" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.183934" elapsed="0.000443"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.184912" level="INFO">${conn_id} = 47</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.184532" elapsed="0.000406"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.185806" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.185901" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.185536" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.186081" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.187250" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.187658" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.186936" elapsed="0.001168">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.188161" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.186565" elapsed="0.001644"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.185150" elapsed="0.003174">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.188698" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.188893" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.189231" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.189360" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.189319" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.189300" elapsed="0.000124"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.189513" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.189477" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.189462" elapsed="0.000112"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.189605" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.192158" elapsed="0.000340"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.192661" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.192974" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.189932" elapsed="0.003192"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.182484" elapsed="0.010714">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.193253" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.181923" elapsed="0.011375"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.181409" elapsed="0.011986">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.193578" elapsed="0.000021"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.193766" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.193971" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.194172" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.179351" elapsed="0.014937">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.163802" elapsed="0.030616">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t6" name="Create Tap Device Before Fail" line="44">
<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-10T00:48:10.197478" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.197222" elapsed="0.000519"/>
</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-10T00:48:10.198724" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.198613" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.198593" 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-10T00:48:10.203318" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.203214" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.203196" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.204392" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.203985" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.204935" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.204577" elapsed="0.000385"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.205008" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:10.205162" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.203601" elapsed="0.001586"/>
</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-10T00:48:10.205532" 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-10T00:48:10.205772" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.205629" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.205612" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.205393" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.205241" 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-10T00:48:10.202859" elapsed="0.003109"/>
</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-10T00:48:10.198327" elapsed="0.007694"/>
</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-10T00:48:10.197906" elapsed="0.008158"/>
</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-10T00:48:10.195237" elapsed="0.010879"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.208738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.208473" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.208454" elapsed="0.000363"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.209113" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.209215" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.208978" elapsed="0.000263"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.209772" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.209389" elapsed="0.000429"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.210347" level="INFO">${conn_id} = 49</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.209988" elapsed="0.000386"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.211268" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.211345" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.211002" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.211523" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.213224" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.213497" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.212810" elapsed="0.001164">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.214030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.212019" elapsed="0.002060"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.210591" elapsed="0.003589">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.214356" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.214574" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.214759" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.214902" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.214859" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.214826" elapsed="0.000141"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.215055" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.215019" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.215003" elapsed="0.000113"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.215146" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.217753" elapsed="0.000327"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.218242" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.218531" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.215457" elapsed="0.003223"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.207920" elapsed="0.010845">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.218821" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.207185" elapsed="0.011698"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.206684" elapsed="0.012302">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.219189" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.219415" elapsed="0.000034"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.219644" elapsed="0.000022"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.206329" elapsed="0.013429">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:48:10.194721" elapsed="0.025183">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t7" name="Add Tap Device Manually and Verify Before Fail" 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-10T00:48:10.224054" elapsed="0.000307"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.223661" 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-10T00:48:10.225924" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.225742" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.225712" elapsed="0.000306"/>
</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-10T00:48:10.231677" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.231553" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.231534" elapsed="0.000213"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.232780" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.232387" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.233268" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.232981" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.233338" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:10.233492" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.231996" 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-10T00:48:10.233893" elapsed="0.000069"/>
</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-10T00:48:10.234188" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.234043" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.234025" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.233734" elapsed="0.000555"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.233572" elapsed="0.000743"/>
</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-10T00:48:10.231185" elapsed="0.003184"/>
</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-10T00:48:10.225340" elapsed="0.009085"/>
</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-10T00:48:10.224661" elapsed="0.009809"/>
</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-10T00:48:10.220818" elapsed="0.013706"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.242339" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.242059" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.242041" elapsed="0.000378"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.242710" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.242815" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.242568" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.243448" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.243007" elapsed="0.000491"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.244255" level="INFO">${conn_id} = 51</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.243655" elapsed="0.000631"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.245301" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.245395" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.244940" elapsed="0.000485"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.245598" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.246896" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.247173" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.246547" elapsed="0.001077">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.247681" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.246166" elapsed="0.001564"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.244504" elapsed="0.003332">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.248027" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.248198" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.248399" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.248526" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.248485" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.248467" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.248673" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.248639" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.248624" elapsed="0.000148"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.248805" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.251355" elapsed="0.000316"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.251858" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.252155" elapsed="0.000136"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.249134" elapsed="0.003211"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.241525" elapsed="0.010894">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.252475" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.240979" elapsed="0.011540"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.240475" elapsed="0.012138">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.252801" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.253011" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.253206" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.253407" elapsed="0.000035"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.238362" elapsed="0.015213">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.220212" elapsed="0.033500">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t8" name="Delete the Bridge Manually and Verify Before Fail" line="52">
<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-10T00:48:10.256931" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.256647" 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-10T00:48:10.258160" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.258051" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.258033" 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-10T00:48:10.263318" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.263207" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.263188" elapsed="0.000205"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.264656" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.264175" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.265233" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.264903" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.265319" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:10.265498" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.263745" 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-10T00:48:10.265987" 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-10T00:48:10.266327" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.266148" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.266126" elapsed="0.000291"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.265805" elapsed="0.000637"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.265590" elapsed="0.000880"/>
</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-10T00:48:10.262764" elapsed="0.003774"/>
</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-10T00:48:10.257752" elapsed="0.008843"/>
</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-10T00:48:10.257337" elapsed="0.009310"/>
</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-10T00:48:10.254648" elapsed="0.012052"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.274620" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.274341" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.274321" elapsed="0.000382"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.275106" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:10.275211" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.274951" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.275785" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:10.275393" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.276412" level="INFO">${conn_id} = 53</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.276004" elapsed="0.000436"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.277379" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:10.277456" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:10.277104" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.277637" elapsed="0.000340"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:10.278820" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:10.279109" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.278500" elapsed="0.001055">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.279613" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.278144" elapsed="0.001519"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.276654" elapsed="0.003120">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.280122" elapsed="0.000025"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.280331" elapsed="0.000023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.280520" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.280646" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.280606" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.280588" elapsed="0.000122"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.280797" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.280762" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.280747" elapsed="0.000130"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.280909" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:10.283521" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.284010" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:10.284324" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:10.281265" elapsed="0.003212"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.273782" elapsed="0.010770">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:10.284609" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.273226" elapsed="0.011429"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.272723" elapsed="0.012029">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.284956" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:10.285154" elapsed="0.000020"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.270651" elapsed="0.014619">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.254055" elapsed="0.031361">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t9" name="Create Bridge In Owner and Verify Before Fail" line="56">
<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-10T00:48:10.289183" elapsed="0.000253"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.288870" elapsed="0.000622"/>
</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-10T00:48:10.290616" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.290505" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.290486" elapsed="0.000230"/>
</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-10T00:48:10.295344" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.295230" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.295212" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.296453" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.296025" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.296982" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.296640" elapsed="0.000368"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.297053" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:10.297206" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.295639" 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-10T00:48:10.297576" 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-10T00:48:10.297825" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.297678" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.297661" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.297438" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.297285" 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-10T00:48:10.294876" elapsed="0.003140"/>
</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-10T00:48:10.290212" elapsed="0.007901"/>
</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-10T00:48:10.289640" elapsed="0.008517"/>
</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-10T00:48:10.286522" elapsed="0.011692"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:10.311995" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.308325" elapsed="0.003711">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.285902" elapsed="0.026277">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t10" name="Create Port In Owner and Verify Before Fail" line="60">
<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-10T00:48:10.315317" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.315059" elapsed="0.000534"/>
</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-10T00:48:10.316593" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.316477" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.316456" 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-10T00:48:10.321253" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.321146" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.321128" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.322345" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.321959" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.322817" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.322530" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.322904" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:10.323059" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.321540" 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-10T00:48:10.323429" 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-10T00:48:10.323667" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.323525" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.323508" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.323291" elapsed="0.000479"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.323138" 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-10T00:48:10.320772" 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-10T00:48:10.316178" elapsed="0.007740"/>
</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-10T00:48:10.315740" elapsed="0.008221"/>
</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-10T00:48:10.313081" elapsed="0.010929"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:10.335386" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.331631" elapsed="0.003792">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.312497" elapsed="0.023062">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t11" name="Modify the destination IP of Port In Owner Before Fail" 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-10T00:48:10.338884" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.338611" 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-10T00:48:10.340171" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.340012" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.339992" elapsed="0.000267"/>
</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-10T00:48:10.344806" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.344699" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.344680" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.345890" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.345492" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.346360" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.346076" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.346431" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:10.346584" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.345121" elapsed="0.001487"/>
</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-10T00:48:10.346966" 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-10T00:48:10.347205" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.347063" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.347046" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.346813" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.346661" elapsed="0.000667"/>
</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-10T00:48:10.344340" 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-10T00:48:10.339711" elapsed="0.007722"/>
</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-10T00:48:10.339297" elapsed="0.008179"/>
</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-10T00:48:10.336432" elapsed="0.011095"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:10.355384" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.351663" elapsed="0.003761">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.335866" elapsed="0.019693">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t12" name="Verify Port Is Modified Before Fail" line="68">
<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-10T00:48:10.358683" elapsed="0.000238"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:10.358396" 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-10T00:48:10.360017" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.359905" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.359886" 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-10T00:48:10.364817" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:10.364709" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:10.364691" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.365895" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:10.365492" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.366368" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:10.366082" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:10.366439" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:10.366592" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:10.365122" elapsed="0.001495"/>
</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-10T00:48:10.366968" elapsed="0.000064"/>
</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-10T00:48:10.367253" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:10.367110" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:10.367093" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:10.366815" elapsed="0.000537"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:10.366668" elapsed="0.000709"/>
</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-10T00:48:10.364353" elapsed="0.003076"/>
</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-10T00:48:10.359605" elapsed="0.007878"/>
</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-10T00:48:10.359185" elapsed="0.008342"/>
</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-10T00:48:10.356398" elapsed="0.011180"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:48:10.373720" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:48:10.373376" elapsed="0.000371"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:10.385866" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.382029" elapsed="0.003877">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:11.404018" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:11.400209" elapsed="0.003861">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:12.422329" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:12.417788" elapsed="0.004594">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:13.439953" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:13.436117" elapsed="0.003887">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:14.458232" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:14.454312" elapsed="0.003976">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:48:15.478553" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.473054" elapsed="0.005573">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:48:15.478782" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:48:10.373950" elapsed="5.105060">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.371398" elapsed="5.107754">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:10.355862" elapsed="5.123557">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t13" name="Delete Port In Owner Before Fail" line="72">
<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-10T00:48:15.482673" elapsed="0.000285"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.482400" elapsed="0.000614"/>
</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-10T00:48:15.484071" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.483932" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.483908" elapsed="0.000237"/>
</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-10T00:48:15.488731" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.488623" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.488604" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.489908" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.489491" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.490442" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.490099" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.490518" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:15.490678" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.489100" elapsed="0.001602"/>
</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-10T00:48:15.491085" 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-10T00:48:15.491328" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.491183" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.491165" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.490938" elapsed="0.000499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.490760" 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-10T00:48:15.488265" elapsed="0.003253"/>
</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-10T00:48:15.483619" elapsed="0.007953"/>
</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-10T00:48:15.483167" elapsed="0.008451"/>
</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-10T00:48:15.480372" elapsed="0.011298"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.503337" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.499639" elapsed="0.003737">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.479779" elapsed="0.023730">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t14" name="Delete Bridge In Owner And Verify Before Fail" line="76">
<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-10T00:48:15.506617" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.506358" elapsed="0.000543"/>
</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-10T00:48:15.507881" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.507752" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.507734" 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-10T00:48:15.512453" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.512348" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.512331" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.513498" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.513122" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.514033" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.513728" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.514104" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:15.514271" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.512737" 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-10T00:48:15.514638" 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-10T00:48:15.514892" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.514735" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.514718" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.514499" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.514348" elapsed="0.000668"/>
</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-10T00:48:15.511996" elapsed="0.003072"/>
</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-10T00:48:15.507471" elapsed="0.007651"/>
</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-10T00:48:15.507053" elapsed="0.008112"/>
</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-10T00:48:15.504371" elapsed="0.010844"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.526513" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.522796" elapsed="0.003754">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.503792" elapsed="0.022890">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t15" name="Kill Owner Instance" 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-10T00:48:15.529920" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.529638" 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-10T00:48:15.531222" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.531113" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.531094" 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-10T00:48:15.536188" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.536068" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.536049" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.537396" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.536982" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.537943" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.537596" elapsed="0.000374"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.538015" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:15.538172" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.536514" elapsed="0.001683"/>
</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-10T00:48:15.538576" 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-10T00:48:15.538819" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.538675" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.538658" elapsed="0.000253"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.538433" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.538271" elapsed="0.000688"/>
</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-10T00:48:15.535664" elapsed="0.003347"/>
</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-10T00:48:15.530812" elapsed="0.008298"/>
</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-10T00:48:15.530360" 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-10T00:48:15.527438" elapsed="0.011768"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:48:15.543282" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</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-10T00:48:15.539463" elapsed="0.003860">Variable '${original_owner}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<arg>${original_candidate_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.543508" elapsed="0.000023"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-04-10T00:48:15.526976" elapsed="0.016681">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t16" name="Check Shards Status After Fail" line="85">
<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-10T00:48:15.546977" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.546703" elapsed="0.000539"/>
</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-10T00:48:15.548209" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.548099" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.548080" 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-10T00:48:15.552804" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.552697" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.552679" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.553863" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.553474" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.554349" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.554049" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.554421" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:15.554572" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.553105" elapsed="0.001492"/>
</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-10T00:48:15.554951" 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-10T00:48:15.555193" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.555050" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.555032" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.554796" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.554648" 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-10T00:48:15.552340" elapsed="0.003026"/>
</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-10T00:48:15.547799" elapsed="0.007641"/>
</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-10T00:48:15.547388" elapsed="0.008105"/>
</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-10T00:48:15.544504" elapsed="0.011042"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.559560" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.555749" elapsed="0.003851">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.543953" elapsed="0.015777">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t17" name="Check Entity Owner Status And Find Owner and Candidate After Fail" 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-10T00:48:15.563078" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.562796" 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-10T00:48:15.564310" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.564201" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.564182" 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-10T00:48:15.569136" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.569028" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.569009" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.570187" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.569794" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.570688" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.570404" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.570758" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.570928" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.569424" 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-10T00:48:15.571290" 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-10T00:48:15.571527" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.571386" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.571369" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.571151" elapsed="0.000473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.571004" elapsed="0.000643"/>
</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-10T00:48:15.568649" elapsed="0.003050"/>
</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-10T00:48:15.563917" elapsed="0.007836"/>
</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-10T00:48:15.563488" elapsed="0.008309"/>
</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-10T00:48:15.560612" elapsed="0.011250"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.582774" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_candidate}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.579143" elapsed="0.003669">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.583001" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.583182" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.583349" elapsed="0.000020"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.560030" elapsed="0.023459">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t18" name="Create Bridge Manually and Verify After Fail" line="99">
<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-10T00:48:15.587280" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.587019" 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-10T00:48:15.588523" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.588411" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.588392" 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-10T00:48:15.593305" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.593198" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.593180" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.594446" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.594034" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.594937" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.594634" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.595009" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.595163" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.593645" 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-10T00:48:15.595529" 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-10T00:48:15.595767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.595625" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.595608" elapsed="0.000246"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.595389" elapsed="0.000491"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.595241" 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-10T00:48:15.592828" elapsed="0.003130"/>
</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-10T00:48:15.588124" elapsed="0.007888"/>
</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-10T00:48:15.587693" elapsed="0.008366"/>
</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-10T00:48:15.584353" elapsed="0.011758"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.603714" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.599943" elapsed="0.003809">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.583765" elapsed="0.020131">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t19" name="Add Port Manually and Verify After Fail" 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-10T00:48:15.606917" elapsed="0.000325"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.606642" elapsed="0.000662"/>
</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-10T00:48:15.608335" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.608226" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.608207" 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-10T00:48:15.613320" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.613201" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.613182" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.614397" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.614000" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.614883" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.614583" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.614955" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:15.615106" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.613610" 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-10T00:48:15.615466" 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-10T00:48:15.615702" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.615560" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.615544" elapsed="0.000271"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.615327" elapsed="0.000512"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.615182" 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-10T00:48:15.612786" 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-10T00:48:15.607941" elapsed="0.008046"/>
</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-10T00:48:15.607488" elapsed="0.008544"/>
</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-10T00:48:15.604586" elapsed="0.011496"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.624078" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.620267" elapsed="0.003849">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.604084" elapsed="0.020163">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t20" name="Create Tap Device After Fail" line="107">
<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-10T00:48:15.627301" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.627043" 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-10T00:48:15.628532" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.628424" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.628406" 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-10T00:48:15.633162" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.633057" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.633040" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.634219" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.633809" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.634695" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.634406" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.634767" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:15.634936" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.633444" elapsed="0.001517"/>
</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-10T00:48:15.635302" 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-10T00:48:15.635542" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.635398" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.635381" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.635162" elapsed="0.000477"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.635013" elapsed="0.000650"/>
</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-10T00:48:15.632691" 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-10T00:48:15.628145" elapsed="0.007623"/>
</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-10T00:48:15.627712" elapsed="0.008099"/>
</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-10T00:48:15.625026" elapsed="0.010851"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.638544" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.638051" elapsed="0.000584"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.638032" elapsed="0.000629"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:15.639003" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:48:15.639109" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:48:15.638813" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.639676" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:15.639290" elapsed="0.000433"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:48:15.640277" level="INFO">${conn_id} = 55</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:15.639898" elapsed="0.000405"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.641213" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:15.641289" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:15.640926" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:15.641469" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:48:15.642653" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:48:15.643053" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.642336" elapsed="0.001198">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:15.643592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.641965" elapsed="0.001676"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.640518" elapsed="0.003225">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.643932" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.644108" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.644285" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.644407" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.644368" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.644350" elapsed="0.000119"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.644553" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.644519" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.644505" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.644642" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:15.647244" elapsed="0.000337"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:48:15.647743" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:48:15.648053" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:48:15.644965" elapsed="0.003248"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.637504" elapsed="0.010783">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:48:15.648343" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.636952" elapsed="0.011437"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.636448" elapsed="0.012069">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.648758" elapsed="0.000025"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.649049" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.649261" elapsed="0.000024"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.636092" elapsed="0.013280">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:48:15.624524" elapsed="0.024974">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t21" name="Add Tap Device Manually and Verify After Fail" 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-10T00:48:15.652807" elapsed="0.000231"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.652547" 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-10T00:48:15.654067" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.653957" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.653938" 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-10T00:48:15.658670" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.658564" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.658546" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.659717" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.659342" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.660203" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.659917" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.660273" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:15.660425" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.658970" elapsed="0.001479"/>
</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-10T00:48:15.660785" 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-10T00:48:15.661040" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.660897" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.660879" elapsed="0.000237"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.660647" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.660500" 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-10T00:48:15.658209" elapsed="0.003008"/>
</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-10T00:48:15.653655" elapsed="0.007617"/>
</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-10T00:48:15.653241" elapsed="0.008075"/>
</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-10T00:48:15.650420" elapsed="0.010948"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.669079" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.665275" elapsed="0.003843">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.649775" elapsed="0.019476">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t22" name="Delete the Bridge Manually and Verify After Fail" 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-10T00:48:15.673937" elapsed="0.000268"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.673620" elapsed="0.000643"/>
</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-10T00:48:15.675260" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.675147" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.675128" elapsed="0.000238"/>
</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-10T00:48:15.679969" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.679839" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.679821" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.681033" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.680633" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.681509" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.681220" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.681582" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.681738" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.680261" elapsed="0.001503"/>
</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-10T00:48:15.682119" 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-10T00:48:15.682384" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.682229" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.682212" elapsed="0.000249"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.681980" elapsed="0.000504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.681816" 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-10T00:48:15.679479" elapsed="0.003082"/>
</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-10T00:48:15.674855" elapsed="0.007762"/>
</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-10T00:48:15.674413" elapsed="0.008249"/>
</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-10T00:48:15.670138" elapsed="0.012577"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.690439" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.686588" elapsed="0.003889">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.669546" elapsed="0.021068">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t23" name="Create Bridge In Owner and Verify After Fail" 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-10T00:48:15.693709" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.693452" 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-10T00:48:15.694983" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.694872" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.694838" 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-10T00:48:15.700021" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.699752" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.699734" elapsed="0.000356"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.701088" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.700689" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.701569" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.701275" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.701643" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.701799" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.700316" elapsed="0.001508"/>
</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-10T00:48:15.702198" elapsed="0.000056"/>
</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-10T00:48:15.702481" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.702334" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.702317" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.702044" elapsed="0.000535"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.701894" elapsed="0.000710"/>
</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-10T00:48:15.699391" elapsed="0.003265"/>
</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-10T00:48:15.694574" elapsed="0.008137"/>
</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-10T00:48:15.694138" elapsed="0.008617"/>
</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-10T00:48:15.691470" elapsed="0.011347"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.714324" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.710582" elapsed="0.003784">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.690911" elapsed="0.023604">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t24" name="Create Port In Owner and Verify After Fail" line="123">
<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-10T00:48:15.717617" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.717358" 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-10T00:48:15.718919" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.718792" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.718773" 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-10T00:48:15.723543" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.723437" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.723419" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.724595" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.724216" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.725086" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.724779" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.725159" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:15.725314" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.723831" elapsed="0.001508"/>
</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-10T00:48:15.725695" 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-10T00:48:15.725951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.725793" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.725776" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.725555" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.725391" 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-10T00:48:15.723082" elapsed="0.003044"/>
</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-10T00:48:15.718507" elapsed="0.007688"/>
</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-10T00:48:15.718059" elapsed="0.008180"/>
</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-10T00:48:15.715369" elapsed="0.010922"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.737980" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.734377" elapsed="0.003641">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.714799" elapsed="0.023370">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t25" name="Modify the destination IP of Port In Owner After Fail" line="127">
<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-10T00:48:15.741372" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.741078" elapsed="0.000566"/>
</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-10T00:48:15.742754" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.742643" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.742625" 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-10T00:48:15.747445" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.747337" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.747320" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.748520" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.748116" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.749089" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.748724" elapsed="0.000393"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.749166" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.749322" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.747731" 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-10T00:48:15.749690" 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-10T00:48:15.749950" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.749789" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.749771" elapsed="0.000257"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.749548" elapsed="0.000504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.749399" 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-10T00:48:15.746974" 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-10T00:48:15.742356" elapsed="0.007851"/>
</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-10T00:48:15.741791" elapsed="0.008460"/>
</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-10T00:48:15.739005" elapsed="0.011299"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.758085" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.754399" elapsed="0.003750">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.738445" elapsed="0.019844">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t26" name="Verify Port Is Modified After Fail" line="131">
<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-10T00:48:15.761586" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.761326" 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-10T00:48:15.762863" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.762739" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.762721" 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-10T00:48:15.767451" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.767346" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.767328" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.768537" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.768119" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.769035" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.768722" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.769108" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.769261" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.767734" 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-10T00:48:15.769624" 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-10T00:48:15.769877" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.769721" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.769704" elapsed="0.000250"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.769486" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.769337" 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-10T00:48:15.766993" elapsed="0.003059"/>
</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-10T00:48:15.762455" elapsed="0.007651"/>
</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-10T00:48:15.762019" elapsed="0.008153"/>
</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-10T00:48:15.759083" elapsed="0.011143"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-04-10T00:48:15.777960" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.774181" elapsed="0.003816">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.758570" elapsed="0.019571">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s1-t27" name="Start Old Owner Instance" line="135">
<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-10T00:48:15.781157" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.780897" elapsed="0.000523"/>
</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-10T00:48:15.782421" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.782312" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.782293" 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-10T00:48:15.787324" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.787217" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.787199" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.788383" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.788002" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.788869" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.788567" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.788943" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.789097" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.787614" elapsed="0.001508"/>
</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-10T00:48:15.789459" 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-10T00:48:15.789695" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.789555" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.789538" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.789320" elapsed="0.000547"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.789173" elapsed="0.000724"/>
</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-10T00:48:15.786858" elapsed="0.003095"/>
</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-10T00:48:15.781998" elapsed="0.008010"/>
</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-10T00:48:15.781567" elapsed="0.008486"/>
</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-10T00:48:15.778915" elapsed="0.011190"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:48:15.794189" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.790339" elapsed="0.003895">Variable '${original_owner}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-04-10T00:48:15.778425" elapsed="0.015947">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t28" name="Check Shards Status After Recover" line="139">
<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-10T00:48:15.797440" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:48:15.797185" elapsed="0.000519"/>
</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-10T00:48:15.798696" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.798587" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.798569" 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-10T00:48:15.803422" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:48:15.803311" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:48:15.803294" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.804462" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.804086" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.804948" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.804646" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.805018" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.805171" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.803706" elapsed="0.001489"/>
</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-10T00:48:15.805531" 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-10T00:48:15.805770" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.805628" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.805611" elapsed="0.000247"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.805393" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.805246" elapsed="0.000660"/>
</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-10T00:48:15.802958" elapsed="0.003000"/>
</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-10T00:48:15.798304" elapsed="0.007708"/>
</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-10T00:48:15.797867" elapsed="0.008188"/>
</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-10T00:48:15.795202" elapsed="0.010933"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:15.827221" elapsed="0.000220"/>
</kw>
<msg time="2026-04-10T00:48:15.827491" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:15.826586" elapsed="0.000956"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:15.826130" elapsed="0.001538"/>
</kw>
<msg time="2026-04-10T00:48:15.827714" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:15.817915" elapsed="0.009844"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:15.817494" elapsed="0.010341"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.828277" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:15.828022" 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-10T00:48:15.833262" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.832884" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.833730" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.833446" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:15.833800" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:15.833970" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:15.832506" elapsed="0.001489"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:15.834154" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.834798" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:15.834468" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.835232" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.834995" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.835635" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:15.835402" 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-10T00:48:15.836229" 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-10T00:48:15.836478" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.836333" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.836712" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.836557" 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-10T00:48:15.836951" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:15.836793" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:15.836315" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:15.836060" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.835706" elapsed="0.001368"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:15.837114" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:15.837317" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:15.837363" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:15.831780" elapsed="0.005607"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.837827" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:15.837921" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:15.837557" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:15.838516" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.838246" elapsed="0.000338">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:15.838014" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:15.837996" 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-10T00:48:15.838886" 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-10T00:48:15.839062" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:15.839128" 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-10T00:48:15.829277" elapsed="0.009959">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:15.829062" elapsed="0.010244">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:15.828936" elapsed="0.010424">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.828539" elapsed="0.010909">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:15.839675" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.809081" elapsed="0.030709">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:16.865803" elapsed="0.000274"/>
</kw>
<msg time="2026-04-10T00:48:16.866147" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:16.865119" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:16.864487" elapsed="0.001810"/>
</kw>
<msg time="2026-04-10T00:48:16.866346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:16.855344" elapsed="0.011049"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:16.854579" elapsed="0.011891"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.866970" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:16.866678" 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-10T00:48:16.872348" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:16.871942" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.872823" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:16.872537" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:16.872914" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:16.873074" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:16.871555" 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-10T00:48:16.873251" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.873944" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:16.873575" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.874367" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:16.874129" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.874773" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:16.874538" 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-10T00:48:16.875206" elapsed="0.000098"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:16.875544" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:16.875394" 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-10T00:48:16.875765" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:16.875625" 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-10T00:48:16.876006" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:16.875863" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:16.875373" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:16.875042" elapsed="0.001062"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:16.874860" elapsed="0.001270"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:16.876169" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:16.876369" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:16.876415" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:16.870819" elapsed="0.005619"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.876897" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:16.876974" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:16.876608" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:16.877584" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:16.877282" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:16.877066" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:16.877048" 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-10T00:48:16.877969" 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-10T00:48:16.878143" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:16.878209" 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-10T00:48:16.868078" elapsed="0.010255">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:16.867823" elapsed="0.010586">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:16.867681" elapsed="0.010796">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:16.867263" elapsed="0.011317">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:16.878835" elapsed="0.000046"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:16.840580" elapsed="0.038395">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:17.905487" elapsed="0.000278"/>
</kw>
<msg time="2026-04-10T00:48:17.905838" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:17.904690" elapsed="0.001234"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:17.904230" elapsed="0.001777"/>
</kw>
<msg time="2026-04-10T00:48:17.906053" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:17.895057" elapsed="0.011041"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:17.894463" elapsed="0.011785"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.906705" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:17.906441" 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-10T00:48:17.911870" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:17.911463" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.912348" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:17.912060" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:17.912422" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:17.912578" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:17.911065" 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-10T00:48:17.912754" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.913435" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:17.913085" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.913920" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:17.913651" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.914335" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:17.914097" 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-10T00:48:17.914750" 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-10T00:48:17.915020" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:17.914874" 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-10T00:48:17.915238" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:17.915100" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:17.915452" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:17.915313" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:17.914840" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:17.914588" elapsed="0.000960"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:17.914408" elapsed="0.001165"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:17.915611" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:17.915810" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:17.915870" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:17.910303" elapsed="0.005592"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.916333" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:17.916409" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:17.916064" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:17.917249" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:17.916754" elapsed="0.000585">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:17.916524" elapsed="0.000883">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:17.916501" elapsed="0.000937">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:17.917593" 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-10T00:48:17.917764" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:17.917830" elapsed="0.000068"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:48:17.907765" elapsed="0.010233">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:17.907533" elapsed="0.010534">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:17.907392" elapsed="0.010730">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:17.906995" elapsed="0.011215">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:17.918443" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:17.879761" elapsed="0.038801">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:18.943293" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:48:18.943611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:18.942626" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:18.942163" elapsed="0.001613"/>
</kw>
<msg time="2026-04-10T00:48:18.943824" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:18.933994" elapsed="0.009892"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:18.933544" elapsed="0.010419"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.944423" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:18.944159" 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-10T00:48:18.949489" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:18.949100" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.949983" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:18.949678" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:18.950058" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:18.950216" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:18.948703" 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-10T00:48:18.950396" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.951063" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:18.950711" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.951733" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:18.951274" elapsed="0.000488"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.952211" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:18.951935" 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-10T00:48:18.952652" 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-10T00:48:18.952958" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:18.952763" 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-10T00:48:18.953274" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:18.953042" elapsed="0.000293"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:18.953507" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:18.953360" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:18.952744" elapsed="0.000839"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:18.952481" elapsed="0.001127"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:18.952297" elapsed="0.001336"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:18.953674" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:18.953899" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:18.953946" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:18.947985" elapsed="0.005986"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.954434" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:18.954511" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:18.954146" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:18.955126" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:18.954824" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:18.954605" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:18.954587" 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-10T00:48:18.955473" 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-10T00:48:18.955646" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:18.955712" 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-10T00:48:18.945499" elapsed="0.010322">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:18.945267" elapsed="0.010642">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:18.945127" 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-10T00:48:18.944700" 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-10T00:48:18.956296" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:18.919381" elapsed="0.037035">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:19.983485" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:48:19.983801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:19.982807" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:19.982349" elapsed="0.001613"/>
</kw>
<msg time="2026-04-10T00:48:19.984007" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:19.973006" elapsed="0.011046"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:19.972395" elapsed="0.011731"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.984592" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:19.984319" 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-10T00:48:19.990164" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:19.989751" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.990728" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:19.990433" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:19.990802" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:48:19.990983" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:19.989381" 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-10T00:48:19.991185" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.991899" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:19.991513" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.992352" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:19.992103" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.992780" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:19.992539" 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-10T00:48:19.993218" 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-10T00:48:19.993472" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:19.993327" 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-10T00:48:19.993690" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:19.993551" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:19.993919" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:19.993766" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:19.993308" elapsed="0.000686"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:19.993053" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:19.992867" elapsed="0.001178"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:19.994084" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:19.994283" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:19.994328" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:19.988647" elapsed="0.005704"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.994790" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:19.994881" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:19.994519" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:19.995469" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:19.995189" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:19.994973" elapsed="0.000635">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:19.994955" 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-10T00:48:19.995792" 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-10T00:48:19.995980" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:19.996046" 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-10T00:48:19.985674" elapsed="0.010480">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:19.985420" elapsed="0.010803">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:19.985279" elapsed="0.010999">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:19.984879" elapsed="0.011534">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:19.996662" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:19.957287" elapsed="0.039492">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:21.023373" elapsed="0.000235"/>
</kw>
<msg time="2026-04-10T00:48:21.023675" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:21.022716" elapsed="0.001021"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:21.022257" elapsed="0.001560"/>
</kw>
<msg time="2026-04-10T00:48:21.023879" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:21.014216" elapsed="0.009708"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:21.013772" elapsed="0.010225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.024521" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:21.024248" 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-10T00:48:21.030352" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:21.029777" elapsed="0.000615"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.031185" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:21.030615" elapsed="0.000608"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:21.031288" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:48:21.031514" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:21.029239" elapsed="0.002309"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:21.031760" elapsed="0.000244"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.032805" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:21.032309" elapsed="0.000556"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.033428" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:21.033088" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.034013" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:21.033665" elapsed="0.000384"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:21.034590" 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-10T00:48:21.034952" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:21.034735" 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-10T00:48:21.035260" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:21.035065" 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-10T00:48:21.035560" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:21.035367" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:21.034710" elapsed="0.000951"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:21.034363" elapsed="0.001331"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:21.034114" elapsed="0.001694"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:21.035887" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:48:21.036198" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:21.036265" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:21.028098" elapsed="0.008200"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.036940" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:21.037049" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:21.036539" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:21.038134" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:21.037476" elapsed="0.000756">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:21.037177" elapsed="0.001146">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:21.037152" elapsed="0.001221">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:21.038584" 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-10T00:48:21.038892" elapsed="0.000039"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:21.039020" elapsed="0.000030"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:48:21.025594" elapsed="0.013589">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:21.025359" elapsed="0.013923">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:21.025216" elapsed="0.014141">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:21.024800" elapsed="0.014685">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:21.039830" elapsed="0.000059"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:20.997580" elapsed="0.042438">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:22.063380" elapsed="0.000251"/>
</kw>
<msg time="2026-04-10T00:48:22.063717" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:22.062698" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:22.062231" elapsed="0.001660"/>
</kw>
<msg time="2026-04-10T00:48:22.063940" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:22.054206" elapsed="0.009780"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:22.053777" elapsed="0.010285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.064512" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:22.064254" 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-10T00:48:22.069743" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:22.069345" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.070281" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:22.069961" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:22.070442" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:48:22.070607" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:22.068968" elapsed="0.001664"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:22.070785" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.071475" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:22.071134" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.072174" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:22.071661" elapsed="0.000541"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.072601" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:22.072355" 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-10T00:48:22.073056" 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-10T00:48:22.073316" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:22.073168" 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-10T00:48:22.073557" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:22.073397" 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-10T00:48:22.073784" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:22.073635" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:22.073148" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:22.072876" elapsed="0.001024"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:22.072675" elapsed="0.001252"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:22.073970" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:48:22.074181" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:22.074227" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:22.068148" elapsed="0.006104"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.074696" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:22.074774" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:22.074423" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:22.075394" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:22.075108" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:22.074883" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:22.074863" 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-10T00:48:22.075731" 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-10T00:48:22.075940" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:22.076029" 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-10T00:48:22.065588" elapsed="0.010565">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:22.065348" elapsed="0.010875">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:22.065206" elapsed="0.011071">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:22.064781" 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-10T00:48:22.076601" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:22.040910" elapsed="0.035852">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:23.101278" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:48:23.101590" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:23.100603" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:23.100144" elapsed="0.001590"/>
</kw>
<msg time="2026-04-10T00:48:23.101781" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:23.092159" elapsed="0.009668"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:23.091723" elapsed="0.010196"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.102382" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:23.102111" 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-10T00:48:23.107777" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:23.107382" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.108276" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:23.107981" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:23.108353" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:23.108514" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:23.106982" 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-10T00:48:23.108694" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.109373" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:23.109027" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.109828" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:23.109583" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.110280" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:23.110035" 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-10T00:48:23.110709" 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-10T00:48:23.111011" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:23.110817" 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-10T00:48:23.111255" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:23.111113" 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-10T00:48:23.111485" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:23.111344" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:23.110798" elapsed="0.000761"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:23.110543" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:23.110354" elapsed="0.001253"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:23.111646" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:23.111884" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:23.111933" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:23.106247" elapsed="0.005711"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.112470" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:23.112548" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:23.112197" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:23.113155" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:23.112875" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:23.112643" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:23.112624" 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-10T00:48:23.113473" 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-10T00:48:23.113644" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:23.113711" 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-10T00:48:23.103491" elapsed="0.010329">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:23.103239" elapsed="0.010668">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:23.103096" elapsed="0.010868">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:23.102656" 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-10T00:48:23.114287" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:23.077585" elapsed="0.036819">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:24.138898" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:48:24.139221" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:24.138201" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:24.137710" elapsed="0.001658"/>
</kw>
<msg time="2026-04-10T00:48:24.139416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:24.129224" elapsed="0.010236"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:24.128783" elapsed="0.010751"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.140008" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:24.139731" 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-10T00:48:24.145356" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:24.144956" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.145832" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:24.145543" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:24.145925" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:24.146087" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:24.144499" elapsed="0.001613"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:24.146264" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.146967" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:24.146580" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.147490" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:24.147236" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.147970" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:24.147669" 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-10T00:48:24.148458" 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-10T00:48:24.148720" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:24.148572" 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-10T00:48:24.148963" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:24.148804" 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-10T00:48:24.149193" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:24.149043" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:24.148551" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:24.148286" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:24.148082" elapsed="0.001237"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:24.149360" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:24.149563" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:24.149610" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:24.143774" elapsed="0.005860"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.150100" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:24.150177" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:24.149807" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:24.151002" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:24.150489" elapsed="0.000589">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:24.150272" elapsed="0.000876">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:24.150253" elapsed="0.000926">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:24.151371" 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-10T00:48:24.151556" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:24.151639" 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-10T00:48:24.141066" elapsed="0.010693">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:24.140817" elapsed="0.011013">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:24.140676" elapsed="0.011229">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:24.140280" elapsed="0.011715">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:24.152229" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:24.115289" elapsed="0.037066">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:25.177667" elapsed="0.000275"/>
</kw>
<msg time="2026-04-10T00:48:25.178016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:25.176980" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:25.176493" elapsed="0.001810"/>
</kw>
<msg time="2026-04-10T00:48:25.178352" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:25.168156" elapsed="0.010243"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:25.167721" elapsed="0.010766"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.178981" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:25.178699" 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-10T00:48:25.184235" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:25.183812" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.184726" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:25.184422" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:25.184802" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:25.184983" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:25.183424" 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-10T00:48:25.185160" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.185835" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:25.185482" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.186520" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:25.186037" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.186980" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:25.186711" 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-10T00:48:25.187411" 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-10T00:48:25.187677" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:25.187523" 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-10T00:48:25.187920" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:25.187761" 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-10T00:48:25.188148" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:25.188001" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:25.187502" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:25.187240" elapsed="0.001009"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:25.187055" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:25.188317" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:25.188521" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:25.188567" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:25.182683" elapsed="0.005907"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.189074" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:25.189153" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:25.188778" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:25.189770" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:25.189463" elapsed="0.000399">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:25.189247" elapsed="0.000730">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:25.189228" 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-10T00:48:25.190168" 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-10T00:48:25.190343" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:25.190410" 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-10T00:48:25.180098" elapsed="0.010437">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:25.179837" elapsed="0.010770">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:25.179689" 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-10T00:48:25.179258" elapsed="0.011508">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:25.191123" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:25.153265" elapsed="0.037977">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:26.217691" elapsed="0.000276"/>
</kw>
<msg time="2026-04-10T00:48:26.218040" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:26.217022" elapsed="0.001098"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:26.216515" elapsed="0.001691"/>
</kw>
<msg time="2026-04-10T00:48:26.218254" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:26.207339" elapsed="0.010964"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:26.206717" elapsed="0.011665"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.218879" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:26.218582" 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-10T00:48:26.224621" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:26.224072" elapsed="0.000579"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.225191" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:26.224821" elapsed="0.000404"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:26.225283" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:48:26.225473" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:26.223663" elapsed="0.001842"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:26.225707" elapsed="0.000215"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.226499" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:26.226135" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.226961" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:26.226691" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.227416" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:26.227159" 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-10T00:48:26.227885" 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-10T00:48:26.228219" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:26.228069" 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-10T00:48:26.228445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:26.228302" 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-10T00:48:26.228670" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:26.228525" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:26.228048" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:26.227690" elapsed="0.001086"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:26.227494" elapsed="0.001308"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:26.228857" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:26.229068" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:26.229116" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:26.222913" elapsed="0.006227"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.229597" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:26.229676" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:26.229313" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:26.230323" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:26.230016" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:26.229772" elapsed="0.000695">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:26.229753" elapsed="0.000746">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:26.230655" 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-10T00:48:26.230830" elapsed="0.000040"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:26.230919" 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-10T00:48:26.219999" elapsed="0.011034">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:26.219739" elapsed="0.011369">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:26.219574" 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-10T00:48:26.219164" elapsed="0.012107">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:26.231508" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:26.192108" elapsed="0.039526">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:27.256588" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:48:27.256910" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:27.255945" elapsed="0.001028"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:27.255470" elapsed="0.001582"/>
</kw>
<msg time="2026-04-10T00:48:27.257098" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:27.247454" elapsed="0.009689"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:27.247042" elapsed="0.010250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.257765" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:27.257487" 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-10T00:48:27.262832" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:27.262445" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.263321" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:27.263033" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:27.263396" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:27.263554" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:27.262078" 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-10T00:48:27.263728" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.264396" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:27.264056" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.264812" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:27.264576" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.265233" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:27.264999" 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-10T00:48:27.265684" 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-10T00:48:27.265959" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:27.265799" 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-10T00:48:27.266185" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:27.266040" 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-10T00:48:27.266400" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:27.266261" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:27.265779" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:27.265490" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:27.265304" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:27.266562" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:48:27.266761" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:27.266808" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:27.261333" elapsed="0.005498"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.267287" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:27.267364" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:27.267016" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:27.268150" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:27.267861" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:27.267455" elapsed="0.000837">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:27.267437" 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-10T00:48:27.268475" 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-10T00:48:27.268644" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:27.268709" 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-10T00:48:27.258834" elapsed="0.010034">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:27.258594" elapsed="0.010349">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:27.258452" elapsed="0.010546">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:27.258055" elapsed="0.011030">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:27.269315" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:27.232461" elapsed="0.036968">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:28.292932" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:48:28.293273" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:28.292262" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:28.291788" elapsed="0.001633"/>
</kw>
<msg time="2026-04-10T00:48:28.293467" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:28.283685" elapsed="0.009826"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:28.283271" elapsed="0.010312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.294054" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:28.293779" 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-10T00:48:28.299360" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:28.298970" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.299829" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:28.299544" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:28.299921" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:28.300081" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:28.298578" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:28.300253" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.300931" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:28.300561" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.301387" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:28.301114" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.301807" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:28.301558" 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-10T00:48:28.302286" 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-10T00:48:28.302544" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:28.302397" 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-10T00:48:28.302762" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:28.302625" 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-10T00:48:28.303073" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:28.302918" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:28.302377" elapsed="0.000774"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:28.302105" elapsed="0.001073"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:28.301906" elapsed="0.001298"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:28.303244" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:28.303450" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:28.303495" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:28.297827" elapsed="0.005691"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.303974" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:28.304052" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:28.303687" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:28.304640" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:28.304358" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:28.304143" elapsed="0.000642">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:28.304125" 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-10T00:48:28.304983" 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-10T00:48:28.305168" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:28.305251" 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-10T00:48:28.295141" elapsed="0.010224">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:28.294896" elapsed="0.010539">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:28.294728" elapsed="0.010762">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:28.294325" elapsed="0.011260">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:28.305817" elapsed="0.000043"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:28.270355" elapsed="0.035599">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:29.333587" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:48:29.333931" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:29.332914" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:29.332332" elapsed="0.001751"/>
</kw>
<msg time="2026-04-10T00:48:29.334129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:29.323318" elapsed="0.010855"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:29.322523" elapsed="0.011724"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.334712" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:29.334454" 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-10T00:48:29.341079" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:29.340421" elapsed="0.000707"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.341816" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:29.341380" elapsed="0.000497"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:29.341951" elapsed="0.000048"/>
</return>
<msg time="2026-04-10T00:48:29.342193" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:29.339717" elapsed="0.002513"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:29.342454" elapsed="0.000238"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.343475" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:29.342969" elapsed="0.000545"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.344157" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:29.343747" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.344798" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:29.344441" elapsed="0.000442"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:29.345480" 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-10T00:48:29.345891" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:29.345642" elapsed="0.000333"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:29.346216" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:29.346011" 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-10T00:48:29.346535" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:29.346330" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:29.345613" elapsed="0.001030"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:29.345234" elapsed="0.001445"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:29.344960" elapsed="0.001758"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:29.346776" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:48:29.347101" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:29.347168" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:29.338637" elapsed="0.008565"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.347868" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:29.347985" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:29.347450" elapsed="0.000569"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:29.350934" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:29.350600" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:29.348119" elapsed="0.002963">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:29.348092" elapsed="0.003022">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:29.351268" 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-10T00:48:29.351448" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:29.351515" 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-10T00:48:29.335789" elapsed="0.015835">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:29.335553" elapsed="0.016140">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:29.335406" elapsed="0.016342">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:29.335006" elapsed="0.016834">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:29.352158" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:29.306730" elapsed="0.045545">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:30.373617" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:48:30.373956" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:30.372951" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:30.372466" elapsed="0.001638"/>
</kw>
<msg time="2026-04-10T00:48:30.374151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:30.364291" elapsed="0.009905"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:30.363875" elapsed="0.010396"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.374726" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:30.374465" 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-10T00:48:30.380046" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:30.379635" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.380573" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:30.380234" elapsed="0.000370"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:30.380663" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:48:30.380834" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:30.379261" 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-10T00:48:30.381031" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.381687" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:30.381349" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.382155" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:30.381883" elapsed="0.000303"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.382577" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:30.382334" 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-10T00:48:30.383020" 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-10T00:48:30.383277" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:30.383130" 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-10T00:48:30.383494" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:30.383358" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:30.383730" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:30.383572" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:30.383110" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:30.382834" elapsed="0.000995"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:30.382650" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:30.383977" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:30.384187" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:30.384233" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:30.378527" elapsed="0.005729"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.384743" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:30.384821" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:30.384468" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:30.385469" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:30.385161" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:30.384934" elapsed="0.000682">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:30.384915" 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-10T00:48:30.385801" 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-10T00:48:30.386013" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:30.386106" 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-10T00:48:30.375792" elapsed="0.010430">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:30.375556" elapsed="0.010737">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:30.375414" elapsed="0.010935">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:30.375016" 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-10T00:48:30.386671" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:30.352956" elapsed="0.033830">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:31.410312" elapsed="0.000251"/>
</kw>
<msg time="2026-04-10T00:48:31.410633" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:31.409639" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:31.409170" elapsed="0.001610"/>
</kw>
<msg time="2026-04-10T00:48:31.410827" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:31.401010" elapsed="0.009878"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:31.400572" elapsed="0.010392"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.411421" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:31.411161" 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-10T00:48:31.416562" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:31.416170" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.417056" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:31.416749" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:31.417132" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:31.417371" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:31.415761" 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-10T00:48:31.417550" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.418229" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:31.417886" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.418657" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:31.418414" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.419084" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:31.418829" 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-10T00:48:31.419511" 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-10T00:48:31.419784" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:31.419621" 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-10T00:48:31.420077" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:31.419906" elapsed="0.000227"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:31.420298" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:31.420157" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:31.419601" elapsed="0.000781"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:31.419345" elapsed="0.001062"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:31.419159" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:31.420472" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:31.420673" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:31.420718" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:31.415041" elapsed="0.005701"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.421198" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:31.421275" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:31.420925" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:31.422127" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:31.421623" elapsed="0.000578">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:31.421407" elapsed="0.000862">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:31.421389" 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-10T00:48:31.422457" 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-10T00:48:31.422630" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:31.422698" 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-10T00:48:31.412513" elapsed="0.010294">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:31.412274" elapsed="0.010620">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:31.412127" elapsed="0.010823">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:31.411695" elapsed="0.011345">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:31.423272" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:31.387446" elapsed="0.035943">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:32.449468" elapsed="0.000414"/>
</kw>
<msg time="2026-04-10T00:48:32.449963" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:32.448477" elapsed="0.001571"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:32.447783" elapsed="0.002349"/>
</kw>
<msg time="2026-04-10T00:48:32.450180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:32.438456" elapsed="0.011772"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:32.437874" elapsed="0.012430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.450769" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:32.450503" 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-10T00:48:32.456161" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:32.455721" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.456696" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:32.456394" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:32.456774" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:32.456969" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:32.455267" 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-10T00:48:32.457184" elapsed="0.000186"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.457904" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:32.457534" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.458583" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:32.458118" elapsed="0.000493"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.459046" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:32.458761" elapsed="0.000312"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:32.459481" 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-10T00:48:32.459830" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:32.459662" 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-10T00:48:32.460111" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:32.459945" 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-10T00:48:32.460337" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:32.460194" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:32.459636" elapsed="0.000787"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:32.459310" elapsed="0.001143"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:32.459123" elapsed="0.001361"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:32.460528" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:32.460744" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:32.460792" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:32.454500" elapsed="0.006315"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.461368" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:32.461448" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:32.461083" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:32.462077" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:32.461765" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:32.461544" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:32.461525" 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-10T00:48:32.462452" 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-10T00:48:32.462631" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:32.462699" 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-10T00:48:32.451931" elapsed="0.010879">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:32.451664" elapsed="0.011236">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:32.451486" elapsed="0.011484">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:32.451085" elapsed="0.011979">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:32.463309" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:32.424287" elapsed="0.039142">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:33.489928" elapsed="0.000337"/>
</kw>
<msg time="2026-04-10T00:48:33.490350" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:33.488992" elapsed="0.001443"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:33.488316" elapsed="0.002228"/>
</kw>
<msg time="2026-04-10T00:48:33.490610" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:33.479959" elapsed="0.010714"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:33.479518" elapsed="0.011260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.491522" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:33.491058" elapsed="0.000528"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.497057" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:33.496637" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.497532" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:33.497244" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:33.497605" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:33.497767" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:33.496268" 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-10T00:48:33.497957" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.498620" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:33.498276" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.499134" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:33.498887" elapsed="0.000325"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.499614" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:33.499371" 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-10T00:48:33.500066" 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-10T00:48:33.500419" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:33.500219" 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-10T00:48:33.500724" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:33.500531" elapsed="0.000268"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:33.501050" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:33.500832" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:33.500190" elapsed="0.000965"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:33.499893" elapsed="0.001296"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:33.499689" elapsed="0.001536"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:33.501281" elapsed="0.000042"/>
</return>
<msg time="2026-04-10T00:48:33.501569" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:33.501633" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:33.495533" elapsed="0.006133"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.502308" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:33.502415" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:33.501923" elapsed="0.000525"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:33.503280" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:33.502865" elapsed="0.000516">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:33.502544" elapsed="0.000930">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:33.502518" elapsed="0.000999">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:33.503728" 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-10T00:48:33.503985" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:33.504081" 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-10T00:48:33.492753" elapsed="0.011482">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:33.492518" elapsed="0.011815">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:33.492376" elapsed="0.012034">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:33.491932" elapsed="0.012606">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:33.504884" elapsed="0.000036"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:33.464274" elapsed="0.040775">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:34.532303" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:48:34.532617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:34.531634" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:34.531169" elapsed="0.001664"/>
</kw>
<msg time="2026-04-10T00:48:34.532897" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:34.519883" elapsed="0.013062"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:34.519289" elapsed="0.013732"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.533480" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:34.533216" 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-10T00:48:34.538613" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:34.538222" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.539147" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:34.538835" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:34.539223" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:34.539381" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:34.537832" 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-10T00:48:34.539573" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.540413" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:34.540070" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.540835" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:34.540595" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.541259" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:34.541021" 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-10T00:48:34.541686" 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-10T00:48:34.541954" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:34.541794" 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-10T00:48:34.542175" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:34.542036" 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-10T00:48:34.542391" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:34.542253" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:34.541774" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:34.541520" elapsed="0.000969"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:34.541332" elapsed="0.001183"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:34.542554" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:34.542772" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:34.542828" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:34.537069" elapsed="0.005800"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.543328" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:34.543408" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:34.543047" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:34.544221" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:34.543922" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:34.543504" elapsed="0.000902">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:34.543485" elapsed="0.000955">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:34.544598" 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-10T00:48:34.544775" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:34.544858" 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-10T00:48:34.534538" elapsed="0.010437">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:34.534308" elapsed="0.010741">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:34.534168" elapsed="0.010939">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:34.533754" elapsed="0.011448">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:34.545437" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:34.505969" elapsed="0.039592">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:35.573486" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:48:35.573810" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:35.572749" elapsed="0.001142"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:35.572258" elapsed="0.001716"/>
</kw>
<msg time="2026-04-10T00:48:35.574022" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:35.562644" elapsed="0.011424"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:35.562050" elapsed="0.012129"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.574684" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:35.574413" 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-10T00:48:35.580086" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:35.579652" elapsed="0.000463"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.580592" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:35.580274" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:35.580669" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:35.580827" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:35.579262" 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-10T00:48:35.581022" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.581689" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:35.581338" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.582132" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:35.581889" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.582572" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:35.582303" 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-10T00:48:35.583006" 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-10T00:48:35.583336" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:35.583188" 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-10T00:48:35.583566" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:35.583425" 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-10T00:48:35.583784" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:35.583645" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:35.583167" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:35.582825" elapsed="0.001076"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:35.582645" elapsed="0.001282"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:35.583968" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:35.584170" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:35.584218" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:35.578516" elapsed="0.005726"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.584694" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:35.584773" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:35.584418" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:35.585527" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:35.585102" elapsed="0.000499">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:35.584884" elapsed="0.000784">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:35.584864" 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-10T00:48:35.585868" 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-10T00:48:35.586042" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:35.586108" 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-10T00:48:35.575770" elapsed="0.010446">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:35.575532" elapsed="0.010755">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:35.575389" elapsed="0.010972">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:35.574978" elapsed="0.011487">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:35.586710" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:35.546467" elapsed="0.040361">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:36.615082" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:48:36.615404" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:36.614392" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:36.613701" elapsed="0.001849"/>
</kw>
<msg time="2026-04-10T00:48:36.615598" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:36.602038" elapsed="0.013605"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:36.601391" elapsed="0.014401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.616298" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:36.616021" 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-10T00:48:36.621505" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:36.621102" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.622038" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:36.621694" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:36.622117" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:48:36.622284" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:36.620692" elapsed="0.001618"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:36.622464" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.623163" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:36.622789" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.623599" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:36.623347" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.624042" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:36.623772" 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-10T00:48:36.624485" 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-10T00:48:36.624743" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:36.624596" 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-10T00:48:36.624982" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:36.624825" 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-10T00:48:36.625218" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:36.625073" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:36.624576" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:36.624312" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:36.624122" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:36.625383" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:36.625584" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:36.625631" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:36.619967" elapsed="0.005687"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.626339" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:36.626428" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:36.625835" elapsed="0.000618"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:36.627265" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:36.626955" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:36.626523" elapsed="0.000890">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:36.626503" 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-10T00:48:36.627737" 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-10T00:48:36.627927" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:36.627995" 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-10T00:48:36.617394" elapsed="0.010766">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:36.617153" elapsed="0.011082">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:36.617009" elapsed="0.011281">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:36.616580" elapsed="0.011803">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:36.628619" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:36.587463" elapsed="0.041278">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:37.655975" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:48:37.656291" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:37.655312" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:37.654837" elapsed="0.001602"/>
</kw>
<msg time="2026-04-10T00:48:37.656485" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:37.645547" elapsed="0.010983"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:37.644965" elapsed="0.011639"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.657074" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:37.656795" 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-10T00:48:37.662351" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:37.661964" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.662829" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:37.662538" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:37.662919" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:37.663079" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:37.661579" 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-10T00:48:37.663255" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.663920" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:37.663569" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.664341" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:37.664101" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.664749" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:37.664512" 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-10T00:48:37.665189" 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-10T00:48:37.665439" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:37.665296" 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-10T00:48:37.665680" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:37.665535" 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-10T00:48:37.665979" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:37.665820" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:37.665276" elapsed="0.000778"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:37.665023" elapsed="0.001056"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:37.664821" elapsed="0.001282"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:37.666143" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:37.666343" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:37.666389" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:37.660815" elapsed="0.005597"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.666868" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:37.666948" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:37.666579" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:37.667535" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:37.667259" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:37.667040" elapsed="0.000633">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:37.667022" 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-10T00:48:37.667870" 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-10T00:48:37.668042" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:37.668108" 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-10T00:48:37.658164" elapsed="0.010053">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:37.657930" elapsed="0.010356">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:37.657774" elapsed="0.010567">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:37.657346" elapsed="0.011085">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:37.668661" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:37.629570" elapsed="0.039207">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:38.693579" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:48:38.693901" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:38.692914" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:38.692434" elapsed="0.001609"/>
</kw>
<msg time="2026-04-10T00:48:38.694089" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:38.684444" elapsed="0.009688"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:38.683989" elapsed="0.010217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.694642" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:38.694388" 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-10T00:48:38.699729" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:38.699338" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.700221" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:38.699931" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:38.700295" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:38.700455" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:38.698899" 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-10T00:48:38.700629" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.701314" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:38.700962" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.701741" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:38.701498" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.702168" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:38.701928" 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-10T00:48:38.702590" 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-10T00:48:38.702858" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:38.702699" 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-10T00:48:38.703079" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:38.702941" 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-10T00:48:38.703294" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:38.703156" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:38.702678" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:38.702425" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:38.702241" elapsed="0.001175"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:38.703454" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:38.703653" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:38.703700" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:38.698173" elapsed="0.005550"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.704182" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:38.704259" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:38.703907" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:38.705051" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:38.704566" elapsed="0.000597">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:38.704351" elapsed="0.000883">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:38.704333" elapsed="0.000932">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:38.705419" 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-10T00:48:38.705592" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:38.705658" 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-10T00:48:38.695686" elapsed="0.010080">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:38.695457" elapsed="0.010377">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:38.695318" elapsed="0.010588">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:38.694924" elapsed="0.011073">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:38.706273" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:38.669625" elapsed="0.036764">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:39.731586" elapsed="0.000271"/>
</kw>
<msg time="2026-04-10T00:48:39.731927" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:39.730909" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:39.730407" elapsed="0.001670"/>
</kw>
<msg time="2026-04-10T00:48:39.732125" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:39.722059" elapsed="0.010114"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:39.721577" elapsed="0.010674"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.732804" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:39.732471" 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-10T00:48:39.738209" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:39.737778" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.738709" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:39.738405" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:39.738789" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:48:39.738975" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:39.737373" 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-10T00:48:39.739160" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.739862" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:39.739491" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.740514" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:39.740055" elapsed="0.000488"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.741045" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:39.740745" 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-10T00:48:39.741494" 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-10T00:48:39.741758" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:39.741609" 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-10T00:48:39.742001" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:39.741840" 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-10T00:48:39.742224" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:39.742080" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:39.741588" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:39.741320" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:39.741126" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:39.742454" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:48:39.742669" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:39.742718" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:39.736505" elapsed="0.006239"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.743220" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:39.743301" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:39.742934" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:39.743927" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:39.743619" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:39.743399" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:39.743379" 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-10T00:48:39.744264" 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-10T00:48:39.744448" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:39.744519" 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-10T00:48:39.733951" elapsed="0.010698">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:39.733689" elapsed="0.011063">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:39.733536" 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-10T00:48:39.733115" elapsed="0.011823">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:39.745190" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:39.707248" elapsed="0.038069">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:40.770158" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:48:40.770464" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:40.769490" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:40.769016" elapsed="0.001591"/>
</kw>
<msg time="2026-04-10T00:48:40.770652" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:40.760889" elapsed="0.009807"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:40.760456" elapsed="0.010314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.771244" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:40.770977" 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-10T00:48:40.776683" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:40.776280" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.777176" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:40.776886" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:40.777251" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:40.777483" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:40.775873" 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-10T00:48:40.777663" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.778339" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:40.777998" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.778765" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:40.778524" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.779199" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:40.778955" 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-10T00:48:40.779624" 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-10T00:48:40.779892" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:40.779732" 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-10T00:48:40.780114" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:40.779974" 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-10T00:48:40.780351" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:40.780192" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:40.779713" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:40.779456" elapsed="0.000995"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:40.779273" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:40.780517" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:40.780720" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:40.780767" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:40.775111" elapsed="0.005680"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.781249" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:40.781327" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:40.780977" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:40.781928" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:40.781639" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:40.781423" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:40.781404" 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-10T00:48:40.782248" 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-10T00:48:40.782424" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:40.782491" 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-10T00:48:40.772350" elapsed="0.010247">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:40.772063" elapsed="0.010604">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:40.771923" 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-10T00:48:40.771515" 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-10T00:48:40.783069" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:40.746188" elapsed="0.036998">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:41.808746" elapsed="0.000303"/>
</kw>
<msg time="2026-04-10T00:48:41.809119" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:41.807931" elapsed="0.001268"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:41.807393" elapsed="0.001896"/>
</kw>
<msg time="2026-04-10T00:48:41.809340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:41.798690" elapsed="0.010696"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:41.798197" elapsed="0.011265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.809935" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:41.809656" 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-10T00:48:41.815481" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:41.815059" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.816017" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:41.815674" elapsed="0.000370"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:41.816094" elapsed="0.000037"/>
</return>
<msg time="2026-04-10T00:48:41.816265" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:41.814661" 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-10T00:48:41.816440" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.817145" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:41.816757" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.817579" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:41.817335" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.818014" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:41.817754" 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-10T00:48:41.818446" 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-10T00:48:41.818707" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:41.818559" 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-10T00:48:41.818944" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:41.818787" 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-10T00:48:41.819183" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:41.819022" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:41.818536" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:41.818279" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:41.818089" elapsed="0.001223"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:41.819352" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:41.819553" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:41.819603" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:41.813916" elapsed="0.005716"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.820332" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:41.820434" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:41.819981" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:41.821456" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:41.820829" elapsed="0.000712">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:41.820559" elapsed="0.001052">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:41.820535" 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-10T00:48:41.821800" 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-10T00:48:41.821994" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:41.822063" 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-10T00:48:41.811072" elapsed="0.011110">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:41.810750" elapsed="0.011503">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:41.810606" elapsed="0.011702">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:41.810210" elapsed="0.012187">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:41.822629" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:41.784122" elapsed="0.038651">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:42.848768" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:48:42.849088" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:42.848121" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:42.847614" elapsed="0.001614"/>
</kw>
<msg time="2026-04-10T00:48:42.849275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:42.839193" elapsed="0.010127"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:42.838276" elapsed="0.011118"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.849859" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:42.849587" 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-10T00:48:42.855035" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:42.854630" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.855542" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:42.855221" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:42.855617" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:48:42.855785" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:42.854261" 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-10T00:48:42.855979" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.856878" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:42.856323" elapsed="0.000584"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.857391" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:42.857140" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.857808" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:42.857566" 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-10T00:48:42.858255" 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-10T00:48:42.858510" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:42.858365" 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-10T00:48:42.858731" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:42.858591" 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-10T00:48:42.858964" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:42.858809" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:42.858345" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:42.858087" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:42.857899" elapsed="0.001191"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:42.859131" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:42.859333" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:42.859380" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:42.853523" elapsed="0.005924"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.859924" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:42.860004" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:42.859631" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:42.860623" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:42.860342" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:42.860111" elapsed="0.000649">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:42.860087" 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-10T00:48:42.860960" 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-10T00:48:42.861141" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:42.861208" 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-10T00:48:42.850910" elapsed="0.010405">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:42.850663" elapsed="0.010721">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:42.850525" elapsed="0.010912">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:42.850133" elapsed="0.011395">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:42.861757" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:42.823612" elapsed="0.038276">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:43.890095" elapsed="0.000300"/>
</kw>
<msg time="2026-04-10T00:48:43.890473" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:43.889218" elapsed="0.001334"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:43.888574" elapsed="0.002184"/>
</kw>
<msg time="2026-04-10T00:48:43.890819" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:43.877619" elapsed="0.013278"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:43.877033" elapsed="0.014000"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.891624" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:43.891293" 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-10T00:48:43.898658" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:43.898151" elapsed="0.000543"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.899320" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:43.898922" elapsed="0.000431"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:43.899415" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:48:43.899615" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:43.897652" elapsed="0.001995"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:43.899862" elapsed="0.000205"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.900705" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:43.900275" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.901275" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:43.900962" elapsed="0.000347"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.901812" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:43.901502" elapsed="0.000359"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:43.902390" 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-10T00:48:43.902719" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:43.902528" 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-10T00:48:43.903174" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:43.902821" elapsed="0.000510"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:43.903723" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:43.903389" elapsed="0.000483"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:43.902502" elapsed="0.001426"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:43.902176" elapsed="0.001805"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:43.901925" elapsed="0.002109"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:43.904133" elapsed="0.000063"/>
</return>
<msg time="2026-04-10T00:48:43.904589" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:43.904692" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:43.896699" elapsed="0.008046"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.905796" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:43.906001" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:43.905165" elapsed="0.000889"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:43.907354" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:43.906689" elapsed="0.000818">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:43.906206" elapsed="0.001540">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:43.906165" elapsed="0.001654">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:43.908189" elapsed="0.000048"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:43.908571" elapsed="0.000045"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:43.908718" elapsed="0.000037"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:48:43.893009" elapsed="0.015978">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:43.892685" elapsed="0.016460">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:43.892509" elapsed="0.016758">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:43.892003" elapsed="0.017465">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:43.910018" elapsed="0.000055"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:43.862615" elapsed="0.047657">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:44.936885" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:48:44.937213" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:44.936184" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:44.935679" elapsed="0.001687"/>
</kw>
<msg time="2026-04-10T00:48:44.937410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:44.927135" 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-10T00:48:44.926473" elapsed="0.011055"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.938052" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:44.937738" 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-10T00:48:44.943541" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:44.943119" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.944073" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:44.943752" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:44.944149" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:44.944330" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:44.942724" 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-10T00:48:44.944513" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.945219" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:44.944868" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.945668" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:44.945420" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.946160" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:44.945880" 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-10T00:48:44.946654" 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-10T00:48:44.947033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:44.946881" 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-10T00:48:44.947258" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:44.947116" 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-10T00:48:44.947512" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:44.947358" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:44.946836" elapsed="0.000753"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:44.946463" elapsed="0.001151"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:44.946233" elapsed="0.001407"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:44.947680" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:44.947925" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:44.947974" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:44.941947" elapsed="0.006051"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.948468" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:44.948547" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:44.948172" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:44.949384" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:44.949078" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:44.948644" elapsed="0.000889">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:44.948625" 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-10T00:48:44.949719" 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-10T00:48:44.949933" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:44.950013" 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-10T00:48:44.939233" elapsed="0.010891">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:44.938985" elapsed="0.011211">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:44.938828" elapsed="0.011424">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:44.938349" elapsed="0.011993">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:44.950628" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:44.911285" elapsed="0.039464">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:45.977519" elapsed="0.000251"/>
</kw>
<msg time="2026-04-10T00:48:45.977862" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:45.976874" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:45.976400" elapsed="0.001612"/>
</kw>
<msg time="2026-04-10T00:48:45.978057" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:45.967242" elapsed="0.010859"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:45.966615" elapsed="0.011660"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.978727" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:45.978465" 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-10T00:48:45.983949" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:45.983546" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.984426" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:45.984137" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:45.984501" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:45.984658" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:45.983178" elapsed="0.001504"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:45.984832" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.985496" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:45.985162" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.985936" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:45.985679" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.986363" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:45.986108" 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-10T00:48:45.986784" 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-10T00:48:45.987055" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:45.986910" 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-10T00:48:45.987272" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:45.987135" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:45.987485" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:45.987348" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:45.986890" elapsed="0.000668"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:45.986617" elapsed="0.000964"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:45.986437" elapsed="0.001169"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:45.987644" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:45.987855" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:45.987904" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:45.982451" elapsed="0.005476"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.988372" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:45.988448" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:45.988095" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:45.989062" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:45.988759" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:45.988539" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:45.988521" 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-10T00:48:45.989383" 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-10T00:48:45.989552" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:45.989617" 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-10T00:48:45.979788" elapsed="0.009972">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:45.979554" elapsed="0.010276">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:45.979410" elapsed="0.010492">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:45.979014" elapsed="0.010979">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:45.990236" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:45.951537" elapsed="0.038814">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:47.016091" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:48:47.016402" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:47.015435" elapsed="0.001028"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:47.014978" elapsed="0.001562"/>
</kw>
<msg time="2026-04-10T00:48:47.016585" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:47.006964" elapsed="0.009665"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:47.006527" elapsed="0.010180"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.017165" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:47.016909" 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-10T00:48:47.022261" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:47.021832" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.022776" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:47.022479" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:47.022865" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:47.023024" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:47.021442" 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-10T00:48:47.023218" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.023907" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:47.023534" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.024338" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:47.024099" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.024734" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:47.024505" elapsed="0.000254"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:47.025163" 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-10T00:48:47.025453" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:47.025275" elapsed="0.000249"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:47.025767" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:47.025557" 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-10T00:48:47.026120" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:47.025960" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:47.025255" elapsed="0.000948"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:47.024999" elapsed="0.001230"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:47.024806" elapsed="0.001449"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:47.026295" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:47.026496" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:47.026541" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:47.020713" elapsed="0.005851"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.027030" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:47.027106" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:47.026738" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:47.029538" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:47.029245" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:47.027200" elapsed="0.002476">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:47.027181" elapsed="0.002556">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:47.029947" 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-10T00:48:47.030165" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:47.030242" 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-10T00:48:47.018239" elapsed="0.012131">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:47.018000" elapsed="0.012451">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:47.017837" elapsed="0.012677">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:47.017431" elapsed="0.013189">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:47.030925" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:46.991326" elapsed="0.039751">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:48.055914" elapsed="0.000283"/>
</kw>
<msg time="2026-04-10T00:48:48.056262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:48.055235" elapsed="0.001093"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:48.054742" elapsed="0.001669"/>
</kw>
<msg time="2026-04-10T00:48:48.056459" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:48.046547" elapsed="0.009957"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:48.046101" elapsed="0.010480"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.057058" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:48.056775" 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-10T00:48:48.062524" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:48.062119" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.063048" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:48.062721" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:48.063124" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:48.063287" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:48.061630" elapsed="0.001683"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:48.063467" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.064201" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:48.063791" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.064669" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:48.064409" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.065109" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:48.064861" 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-10T00:48:48.065615" 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-10T00:48:48.065889" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:48.065726" 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-10T00:48:48.066108" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:48.065969" 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-10T00:48:48.066324" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:48.066185" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:48.065707" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:48.065438" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:48.065184" elapsed="0.001261"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:48.066483" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:48.066684" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:48.066731" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:48.060868" elapsed="0.005887"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.067212" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:48.067289" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:48.066941" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:48.067887" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:48.067596" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:48.067381" elapsed="0.000642">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:48.067363" 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-10T00:48:48.068207" 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-10T00:48:48.068384" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:48.068450" 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-10T00:48:48.058153" elapsed="0.010403">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:48.057911" elapsed="0.010715">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:48.057754" elapsed="0.010926">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:48.057356" elapsed="0.011413">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:48.069060" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:48.031945" elapsed="0.037233">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:49.095085" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:48:49.095400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:49.094425" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:49.093960" elapsed="0.001581"/>
</kw>
<msg time="2026-04-10T00:48:49.095589" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:49.085934" elapsed="0.009700"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:49.085509" elapsed="0.010201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.096179" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:49.095918" 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-10T00:48:49.101304" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:49.100906" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.101781" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:49.101491" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:49.101870" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:49.102032" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:49.100491" 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-10T00:48:49.102209" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.102878" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:49.102526" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.103300" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:49.103060" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.103709" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:49.103471" 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-10T00:48:49.104179" 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-10T00:48:49.104433" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:49.104286" 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-10T00:48:49.104653" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:49.104514" 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-10T00:48:49.104910" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:49.104730" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:49.104267" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:49.104011" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:49.103806" elapsed="0.001231"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:49.105138" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:49.105342" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:49.105389" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:49.099751" elapsed="0.005662"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.105889" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:49.105969" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:49.105585" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:49.106756" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:49.106285" elapsed="0.000540">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:49.106069" elapsed="0.000840">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:49.106050" 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-10T00:48:49.107093" 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-10T00:48:49.107265" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:49.107331" 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-10T00:48:49.097254" elapsed="0.010186">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:49.097022" elapsed="0.010489">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:49.096857" elapsed="0.010710">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:49.096451" elapsed="0.011208">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:49.107908" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:49.070012" elapsed="0.038014">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:50.135410" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:48:50.135720" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:50.134747" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:50.134254" elapsed="0.001625"/>
</kw>
<msg time="2026-04-10T00:48:50.135926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:50.124637" elapsed="0.011334"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:50.124056" elapsed="0.011989"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.136506" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:50.136234" 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-10T00:48:50.141630" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:50.141244" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.142124" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:50.141817" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:50.142198" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:50.142445" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:50.140827" elapsed="0.001645"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:50.142625" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.143298" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:50.142959" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.143940" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:50.143482" elapsed="0.000486"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.144361" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:50.144116" 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-10T00:48:50.144805" 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-10T00:48:50.145079" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:50.144932" 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-10T00:48:50.145297" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:50.145159" 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-10T00:48:50.145515" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:50.145375" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:50.144911" elapsed="0.000678"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:50.144635" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:50.144448" elapsed="0.001191"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:50.145679" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:50.145894" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:50.145941" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:50.140080" elapsed="0.005885"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.146406" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:50.146483" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:50.146134" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:50.147085" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:50.146791" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:50.146576" elapsed="0.000645">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:50.146558" 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-10T00:48:50.147404" 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-10T00:48:50.147581" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:50.147648" 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-10T00:48:50.137574" elapsed="0.010180">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:50.137342" elapsed="0.010482">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:50.137202" elapsed="0.010693">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:50.136787" elapsed="0.011200">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:50.148217" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:50.108901" elapsed="0.039431">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:51.171355" elapsed="0.000236"/>
</kw>
<msg time="2026-04-10T00:48:51.171657" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:51.170691" elapsed="0.001028"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:51.170231" elapsed="0.001568"/>
</kw>
<msg time="2026-04-10T00:48:51.171860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:51.162096" elapsed="0.009812"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:51.161668" elapsed="0.010315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.172448" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:51.172191" 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-10T00:48:51.177750" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:51.177362" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.178244" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:51.177953" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:51.178319" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:51.178479" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:51.176990" 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-10T00:48:51.178658" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.179331" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:51.178993" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.179758" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:51.179516" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.180206" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:51.179947" 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-10T00:48:51.180625" 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-10T00:48:51.180891" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:51.180731" 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-10T00:48:51.181113" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:51.180972" 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-10T00:48:51.181330" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:51.181190" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:51.180712" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:51.180460" elapsed="0.000968"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:51.180280" elapsed="0.001173"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:51.181493" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:51.181690" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:51.181737" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:51.176252" elapsed="0.005509"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.182284" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:51.182363" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:51.182011" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:51.182969" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:51.182674" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:51.182457" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:51.182439" 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-10T00:48:51.183288" 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-10T00:48:51.183459" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:51.183525" 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-10T00:48:51.173503" elapsed="0.010129">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:51.173272" elapsed="0.010431">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:51.173132" elapsed="0.010626">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:51.172720" elapsed="0.011142">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:51.184121" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:51.149037" elapsed="0.035201">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:52.210861" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:48:52.211173" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:52.210195" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:52.209711" elapsed="0.001604"/>
</kw>
<msg time="2026-04-10T00:48:52.211361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:52.200630" elapsed="0.010775"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:52.200064" elapsed="0.011414"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.211969" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:52.211684" 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-10T00:48:52.217062" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:52.216658" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.217537" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:52.217247" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:52.217611" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:52.217768" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:52.216290" elapsed="0.001503"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:52.217963" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.218619" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:52.218287" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.219139" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:52.218895" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.219548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:52.219311" 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-10T00:48:52.220004" 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-10T00:48:52.220255" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:52.220111" 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-10T00:48:52.220473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:52.220335" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:52.220688" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:52.220550" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:52.220091" elapsed="0.000670"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:52.219818" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:52.219632" elapsed="0.001179"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:52.220865" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:52.221067" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:52.221112" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:52.215496" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.221571" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:52.221647" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:52.221304" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:52.222420" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:52.222140" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:52.221738" elapsed="0.000819">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:52.221720" 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-10T00:48:52.222738" 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-10T00:48:52.222929" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:52.222996" 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-10T00:48:52.213018" elapsed="0.010084">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:52.212768" elapsed="0.010402">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:52.212630" elapsed="0.010604">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:52.212239" elapsed="0.011085">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:52.223554" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:52.185104" elapsed="0.038576">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:53.251590" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:48:53.251923" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:53.250919" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:53.250436" elapsed="0.001718"/>
</kw>
<msg time="2026-04-10T00:48:53.252203" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:53.240346" elapsed="0.011905"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:53.239737" elapsed="0.012592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.252790" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:53.252521" 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-10T00:48:53.258475" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:53.258045" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.258977" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:53.258666" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:53.259052" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:53.259242" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:53.257643" elapsed="0.001632"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:53.259464" elapsed="0.000202"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.260276" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:53.259886" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.260720" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:53.260474" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.261180" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:53.260909" 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-10T00:48:53.261646" 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-10T00:48:53.261926" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:53.261759" 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-10T00:48:53.262149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:53.262009" 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-10T00:48:53.262388" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:53.262228" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:53.261739" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:53.261471" elapsed="0.001020"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:53.261261" elapsed="0.001255"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:53.262555" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:53.262759" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:53.262806" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:53.256855" elapsed="0.005974"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.263366" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:53.263445" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:53.263025" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:53.264061" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:53.263756" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:53.263539" elapsed="0.000706">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:53.263521" 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-10T00:48:53.264446" 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-10T00:48:53.264627" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:53.264694" 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-10T00:48:53.253886" elapsed="0.010919">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:53.253634" elapsed="0.011262">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:53.253492" elapsed="0.011460">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:53.253088" elapsed="0.011955">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:53.265280" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:53.224505" elapsed="0.040911">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:54.289548" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:48:54.289876" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:54.288904" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:54.288431" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:48:54.290064" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:54.280359" elapsed="0.009748"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:54.279942" elapsed="0.010237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.290639" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:54.290381" 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-10T00:48:54.295749" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:54.295363" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.296248" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:54.295951" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:54.296321" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:54.296478" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:54.294995" elapsed="0.001508"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:54.296653" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.297319" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:54.296983" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.297740" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:54.297504" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.298157" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:54.297924" 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-10T00:48:54.298573" 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-10T00:48:54.299144" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:54.298962" 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-10T00:48:54.299370" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:54.299230" 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-10T00:48:54.299592" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:54.299453" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:54.298903" elapsed="0.000763"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:54.298409" elapsed="0.001282"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:54.298229" elapsed="0.001487"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:54.299755" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:54.299972" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:54.300018" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:54.294257" elapsed="0.005785"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.300481" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:54.300558" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:54.300208" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:54.301345" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:54.301056" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:54.300649" elapsed="0.000835">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:54.300631" elapsed="0.000884">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:54.301665" 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-10T00:48:54.301833" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:54.301915" 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-10T00:48:54.291698" elapsed="0.010324">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:54.291470" elapsed="0.010622">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:54.291332" 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-10T00:48:54.290941" elapsed="0.011294">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:54.302465" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:54.266255" elapsed="0.036324">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:55.329510" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:48:55.329823" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:55.328838" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:55.328363" elapsed="0.001622"/>
</kw>
<msg time="2026-04-10T00:48:55.330031" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:55.318999" elapsed="0.011076"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:55.318413" elapsed="0.011859"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.330742" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:55.330477" 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-10T00:48:55.336040" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:55.335630" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.336515" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:55.336227" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:55.336590" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:55.336747" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:55.335262" elapsed="0.001510"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:55.336938" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.337586" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:55.337251" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.338025" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:55.337767" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.338452" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:55.338196" 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-10T00:48:55.338886" 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-10T00:48:55.339148" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:55.339002" 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-10T00:48:55.339378" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:55.339230" 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-10T00:48:55.339596" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:55.339456" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:55.338977" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:55.338704" elapsed="0.000989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:55.338525" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:55.339756" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:55.339971" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:55.340017" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:55.334530" elapsed="0.005510"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.340590" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:55.340672" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:55.340241" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:55.341334" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:55.341035" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:55.340772" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:55.340748" 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-10T00:48:55.341658" 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-10T00:48:55.341865" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:55.341935" 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-10T00:48:55.331807" elapsed="0.010278">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:55.331575" elapsed="0.010585">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:55.331435" 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-10T00:48:55.331034" elapsed="0.011302">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:55.342577" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:55.303444" elapsed="0.039253">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:56.369309" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:48:56.369636" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:56.368599" elapsed="0.001107"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:56.368074" elapsed="0.001737"/>
</kw>
<msg time="2026-04-10T00:48:56.369880" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:56.359973" elapsed="0.009958"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:56.359536" elapsed="0.010475"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.370618" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:56.370205" 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-10T00:48:56.375699" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:56.375309" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.376192" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:56.375905" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:56.376266" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:48:56.376427" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:56.374936" 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-10T00:48:56.376605" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.377275" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:56.376937" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.377699" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:56.377458" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.378152" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:56.377912" 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-10T00:48:56.378571" 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-10T00:48:56.378825" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:56.378679" 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-10T00:48:56.379061" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:56.378921" 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-10T00:48:56.379345" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:56.379204" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:56.378659" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:56.378405" elapsed="0.001036"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:56.378225" elapsed="0.001241"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:56.379506" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:48:56.379704" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:56.379750" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:56.374212" elapsed="0.005561"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.380232" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:56.380309" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:56.379957" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:56.381102" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:56.380616" elapsed="0.000559">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:56.380402" elapsed="0.000838">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:56.380383" 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-10T00:48:56.381425" 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-10T00:48:56.381595" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:56.381660" 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-10T00:48:56.371711" elapsed="0.010070">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:56.371478" elapsed="0.010389">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:56.371338" elapsed="0.010585">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:56.370938" elapsed="0.011075">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:56.382244" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:56.343522" elapsed="0.038838">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:57.407729" elapsed="0.000258"/>
</kw>
<msg time="2026-04-10T00:48:57.408054" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:57.407084" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:57.406610" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:48:57.408244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:57.398573" elapsed="0.009715"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:57.398164" elapsed="0.010197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.408809" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:57.408554" 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-10T00:48:57.413988" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:57.413584" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.414466" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:57.414175" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:57.414540" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:57.414699" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:57.413126" 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-10T00:48:57.414890" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.415549" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:57.415211" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.416187" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:57.415732" elapsed="0.000482"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.416609" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:57.416365" 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-10T00:48:57.417057" 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-10T00:48:57.417336" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:57.417167" 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-10T00:48:57.417559" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:57.417418" 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-10T00:48:57.417780" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:57.417638" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:57.417147" elapsed="0.000724"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:57.416888" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:57.416682" elapsed="0.001239"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:57.417961" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:57.418162" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:57.418209" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:57.412386" elapsed="0.005847"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.418672" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:57.418749" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:57.418402" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:57.419347" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:57.419071" elapsed="0.000346">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:57.418854" elapsed="0.000628">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:57.418822" 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-10T00:48:57.419664" 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-10T00:48:57.419835" elapsed="0.000036"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:57.419917" 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-10T00:48:57.409895" elapsed="0.010130">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:57.409642" elapsed="0.010454">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:57.409499" elapsed="0.010653">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:57.409094" elapsed="0.011148">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:57.420518" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:57.383259" elapsed="0.037375">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:58.443925" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:48:58.444233" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:58.443267" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:58.442790" elapsed="0.001586"/>
</kw>
<msg time="2026-04-10T00:48:58.444423" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:58.434760" elapsed="0.009707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:58.434353" elapsed="0.010188"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.445017" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:58.444730" 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-10T00:48:58.450370" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:58.449953" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.450865" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:58.450559" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:58.450943" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:58.451104" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:58.449538" 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-10T00:48:58.451283" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.451945" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:58.451595" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.452365" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:58.452125" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.452772" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:58.452536" 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-10T00:48:58.453231" 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-10T00:48:58.453482" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:58.453337" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:58.453698" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:58.453560" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:58.453929" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:58.453774" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:58.453318" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:58.453066" elapsed="0.000961"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:58.452883" elapsed="0.001169"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:58.454158" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:48:58.454363" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:58.454409" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:58.448798" elapsed="0.005634"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.454887" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:58.454966" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:58.454601" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:58.455561" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:58.455278" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:58.455060" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:58.455041" 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-10T00:48:58.455901" 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-10T00:48:58.456074" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:58.456140" 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-10T00:48:58.446069" elapsed="0.010180">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:58.445820" elapsed="0.010497">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:58.445682" elapsed="0.010689">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:58.445290" elapsed="0.011170">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:58.456687" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:58.421523" elapsed="0.035289">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:48:59.483874" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:48:59.484188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:59.483209" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:48:59.482729" elapsed="0.001614"/>
</kw>
<msg time="2026-04-10T00:48:59.484389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:48:59.473656" 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-10T00:48:59.473088" elapsed="0.011419"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.484989" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:48:59.484712" 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-10T00:48:59.490088" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:59.489686" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.490561" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:59.490273" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:48:59.490634" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:48:59.490891" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:48:59.489319" elapsed="0.001599"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:48:59.491071" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.491726" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:48:59.491388" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.492173" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:59.491930" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.492601" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:48:59.492361" 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-10T00:48:59.493044" 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-10T00:48:59.493299" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:59.493154" 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-10T00:48:59.493519" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:59.493380" 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-10T00:48:59.493743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:48:59.493597" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:48:59.493134" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:48:59.492876" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:59.492674" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:48:59.493923" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:48:59.494126" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:48:59.494180" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:48:59.488581" elapsed="0.005623"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.494647" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:48:59.494725" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:48:59.494378" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:48:59.495521" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:48:59.495051" elapsed="0.000545">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:48:59.494820" elapsed="0.000843">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:48:59.494801" 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-10T00:48:59.495864" 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-10T00:48:59.496038" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:48:59.496111" 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-10T00:48:59.486038" elapsed="0.010180">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:48:59.485792" elapsed="0.010494">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:48:59.485655" elapsed="0.010701">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:48:59.485261" elapsed="0.011184">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:48:59.496673" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:59.457647" elapsed="0.039141">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:00.521697" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:49:00.522022" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:00.521054" elapsed="0.001033"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:00.520579" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:49:00.522212" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:00.512545" elapsed="0.009712"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:00.512138" elapsed="0.010199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.522779" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:00.522525" 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-10T00:49:00.527917" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:00.527504" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.528400" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:00.528104" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:00.528475" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:00.528633" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:00.527135" 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-10T00:49:00.528807" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.529680" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:00.529139" elapsed="0.000568"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.530124" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:00.529878" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.530547" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:00.530305" 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-10T00:49:00.530983" 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-10T00:49:00.531239" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:00.531093" 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-10T00:49:00.531459" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:00.531319" 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-10T00:49:00.531690" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:00.531536" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:00.531073" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:00.530801" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:00.530620" elapsed="0.001218"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:00.531896" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:00.532100" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:00.532146" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:00.526388" elapsed="0.005782"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.532678" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:00.532757" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:00.532404" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:00.533364" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:00.533086" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:00.532867" elapsed="0.000633">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:00.532833" 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-10T00:49:00.533683" 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-10T00:49:00.533871" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:00.533939" 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-10T00:49:00.523866" elapsed="0.010182">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:00.523607" elapsed="0.010512">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:00.523466" elapsed="0.010708">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:00.523067" elapsed="0.011198">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:00.534508" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:00.497626" elapsed="0.036999">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:01.559675" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:49:01.560011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:01.559006" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:01.558529" elapsed="0.001629"/>
</kw>
<msg time="2026-04-10T00:49:01.560204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:01.549796" elapsed="0.010453"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:01.549228" elapsed="0.011093"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.560778" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:01.560521" 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-10T00:49:01.566231" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:01.565783" elapsed="0.000476"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.566713" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:01.566418" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:01.566788" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:01.566965" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:01.565409" 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-10T00:49:01.567141" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.567815" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:01.567477" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.568350" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:01.568103" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.568778" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:01.568529" 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-10T00:49:01.569225" 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-10T00:49:01.569494" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:01.569335" 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-10T00:49:01.569723" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:01.569584" 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-10T00:49:01.569955" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:01.569800" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:01.569315" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:01.569061" elapsed="0.001005"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:01.568872" elapsed="0.001225"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:01.570140" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:01.570343" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:01.570396" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:01.564641" elapsed="0.005781"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.570883" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:01.570960" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:01.570592" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:01.571581" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:01.571262" elapsed="0.000392">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:01.571051" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:01.571034" 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-10T00:49:01.571916" 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-10T00:49:01.572086" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:01.572151" 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-10T00:49:01.561862" elapsed="0.010396">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:01.561611" elapsed="0.010727">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:01.561466" elapsed="0.010928">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:01.561069" elapsed="0.011414">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:01.572713" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:01.535502" elapsed="0.037326">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:02.598535" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:49:02.598840" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:02.597884" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:02.597405" elapsed="0.001700"/>
</kw>
<msg time="2026-04-10T00:49:02.599152" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:02.588680" elapsed="0.010518"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:02.588119" elapsed="0.011164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.599727" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:02.599470" 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-10T00:49:02.604792" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:02.604406" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.605315" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:02.605017" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:02.605388" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:02.605546" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:02.604032" 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-10T00:49:02.605719" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.606393" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:02.606049" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.606811" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:02.606573" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.607250" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:02.607014" 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-10T00:49:02.607666" 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-10T00:49:02.607929" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:02.607772" 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-10T00:49:02.608148" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:02.608010" 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-10T00:49:02.608369" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:02.608231" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:02.607753" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:02.607501" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:02.607320" elapsed="0.001171"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:02.608530" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:02.608729" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:02.608776" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:02.603291" elapsed="0.005509"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.609250" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:02.609328" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:02.608983" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:02.610104" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:02.609809" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:02.609421" elapsed="0.000854">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:02.609403" 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-10T00:49:02.610462" 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-10T00:49:02.610632" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:02.610698" 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-10T00:49:02.600778" elapsed="0.010026">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:02.600545" elapsed="0.010356">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:02.600408" elapsed="0.010552">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:02.600012" elapsed="0.011039">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:02.611282" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:02.573840" elapsed="0.037556">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:03.638924" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:49:03.639261" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:03.638186" elapsed="0.001142"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:03.637708" elapsed="0.001701"/>
</kw>
<msg time="2026-04-10T00:49:03.639454" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:03.629606" elapsed="0.009892"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:03.629190" elapsed="0.010382"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.640052" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:03.639772" 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-10T00:49:03.645417" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:03.645027" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.645908" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:03.645604" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:03.645983" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:03.646142" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:03.644636" 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-10T00:49:03.646317" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.647010" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:03.646655" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.647430" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:03.647191" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.647856" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:03.647598" 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-10T00:49:03.648281" 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-10T00:49:03.648662" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:03.648479" 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-10T00:49:03.648937" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:03.648761" 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-10T00:49:03.649166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:03.649024" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:03.648457" elapsed="0.000789"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:03.648114" elapsed="0.001158"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:03.647930" elapsed="0.001369"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:03.649339" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:03.649542" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:03.649589" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:03.643912" elapsed="0.005701"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.650115" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:03.650193" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:03.649784" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:03.650909" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:03.650595" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:03.650291" elapsed="0.000761">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:03.650270" elapsed="0.000813">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:03.651233" 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-10T00:49:03.651402" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:03.651467" 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-10T00:49:03.641118" elapsed="0.010454">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:03.640879" elapsed="0.010761">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:03.640722" elapsed="0.010972">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:03.640328" elapsed="0.011453">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:03.652032" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:03.612231" elapsed="0.039917">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:04.676903" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:49:04.677227" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:04.676229" elapsed="0.001067"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:04.675737" elapsed="0.001644"/>
</kw>
<msg time="2026-04-10T00:49:04.677428" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:04.667605" elapsed="0.009868"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:04.667170" elapsed="0.010453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.678108" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:04.677815" 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-10T00:49:04.683400" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:04.683001" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.683905" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:04.683587" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:04.683984" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:49:04.684149" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:04.682592" 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-10T00:49:04.684323" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.685004" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:04.684648" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.685425" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:04.685186" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.685950" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:04.685616" elapsed="0.000363"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:04.686485" 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-10T00:49:04.686750" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:04.686599" 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-10T00:49:04.686987" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:04.686830" 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-10T00:49:04.687201" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:04.687063" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:04.686578" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:04.686285" elapsed="0.001016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:04.686026" elapsed="0.001304"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:04.687368" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:04.687592" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:04.687640" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:04.681783" elapsed="0.005880"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.688141" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:04.688219" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:04.687856" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:04.691070" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:04.690754" elapsed="0.000393">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:04.690513" elapsed="0.000701">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:04.688293" elapsed="0.002953">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:04.691407" 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-10T00:49:04.691580" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:04.691647" 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-10T00:49:04.679276" elapsed="0.012522">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:04.679030" elapsed="0.012877">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:04.678839" elapsed="0.013126">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:04.678386" elapsed="0.013672">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:04.692294" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:04.653206" elapsed="0.039207">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:05.716732" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:49:05.717065" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:05.716069" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:05.715593" elapsed="0.001619"/>
</kw>
<msg time="2026-04-10T00:49:05.717258" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:05.707497" elapsed="0.009806"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:05.707062" elapsed="0.010314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.717873" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:05.717594" 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-10T00:49:05.773265" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:05.772784" elapsed="0.000532"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.773859" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:05.773534" elapsed="0.000355"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:05.773939" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:49:05.774111" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:05.772376" elapsed="0.001760"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:05.774289" elapsed="0.000213"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.775031" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:05.774669" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.775511" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:05.775214" elapsed="0.000325"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.775946" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:05.775687" 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-10T00:49:05.776403" 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-10T00:49:05.776688" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:05.776540" 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-10T00:49:05.776924" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:05.776769" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:05.777220" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:05.777077" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:05.776517" elapsed="0.000776"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:05.776210" elapsed="0.001107"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:05.776022" elapsed="0.001321"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:05.777426" elapsed="0.000048"/>
</return>
<msg time="2026-04-10T00:49:05.777661" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:05.777707" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:05.771545" elapsed="0.006186"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.778198" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:05.778274" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:05.777918" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:05.778929" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:05.778625" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:05.778369" elapsed="0.000701">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:05.778349" 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-10T00:49:05.779253" 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-10T00:49:05.779448" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:05.779544" 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-10T00:49:05.718953" elapsed="0.060706">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:05.718701" elapsed="0.061028">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:05.718555" elapsed="0.061229">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:05.718149" elapsed="0.061741">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:05.780125" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:05.693381" elapsed="0.086858">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:06.804773" elapsed="0.000314"/>
</kw>
<msg time="2026-04-10T00:49:06.805154" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:06.803973" elapsed="0.001245"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:06.803470" elapsed="0.001835"/>
</kw>
<msg time="2026-04-10T00:49:06.805357" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:06.794998" 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-10T00:49:06.794559" elapsed="0.010921"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.805964" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:06.805680" 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-10T00:49:06.811225" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:06.810804" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.811710" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:06.811416" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:06.811795" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:06.811978" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:06.810343" 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-10T00:49:06.812156" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.812824" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:06.812472" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.813306" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:06.813059" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.813720" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:06.813479" 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-10T00:49:06.814195" 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-10T00:49:06.814455" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:06.814307" 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-10T00:49:06.814676" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:06.814537" 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-10T00:49:06.814921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:06.814755" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:06.814285" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:06.814022" elapsed="0.001002"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:06.813799" elapsed="0.001250"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:06.815089" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:06.815294" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:06.815341" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:06.809576" elapsed="0.005790"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.816054" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:06.816134" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:06.815537" elapsed="0.000621"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:06.816732" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:06.816449" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:06.816230" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:06.816211" 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-10T00:49:06.817097" 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-10T00:49:06.817290" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:06.817357" 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-10T00:49:06.807041" elapsed="0.010425">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:06.806787" elapsed="0.010749">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:06.806645" elapsed="0.010946">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:06.806242" 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-10T00:49:06.817976" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:06.781119" elapsed="0.036975">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:07.844107" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:49:07.844497" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:07.843419" elapsed="0.001154"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:07.842934" elapsed="0.001726"/>
</kw>
<msg time="2026-04-10T00:49:07.844708" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:07.834715" elapsed="0.010038"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:07.834265" elapsed="0.010566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.845303" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:07.845040" 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-10T00:49:07.851042" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:07.850482" elapsed="0.000606"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.851712" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:07.851312" elapsed="0.000436"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:07.851815" elapsed="0.000063"/>
</return>
<msg time="2026-04-10T00:49:07.852064" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:07.849966" elapsed="0.002136"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:07.852322" elapsed="0.000267"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.853320" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:07.852821" elapsed="0.000536"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.853944" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:07.853582" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.854531" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:07.854197" elapsed="0.000370"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:07.855155" 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-10T00:49:07.855517" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:07.855306" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:07.855828" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:07.855628" elapsed="0.000298"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:07.856160" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:07.855960" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:07.855279" elapsed="0.000983"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:07.854914" elapsed="0.001385"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:07.854631" elapsed="0.001708"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:07.856502" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:49:07.856792" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:07.856876" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:07.849049" elapsed="0.007864"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.857538" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:07.857645" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:07.857158" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:07.858494" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:07.858101" elapsed="0.000491">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:07.857776" elapsed="0.000908">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:07.857749" 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-10T00:49:07.858962" 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-10T00:49:07.859210" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:07.859301" 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-10T00:49:07.846361" elapsed="0.013094">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:07.846126" elapsed="0.013425">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:07.845988" elapsed="0.013639">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:07.845576" elapsed="0.014177">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:07.860100" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:07.818962" elapsed="0.041300">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:08.885978" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:49:08.886279" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:08.885287" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:08.884772" elapsed="0.001653"/>
</kw>
<msg time="2026-04-10T00:49:08.886471" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:08.876448" elapsed="0.010067"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:08.876035" elapsed="0.010556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.887063" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:08.886785" 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-10T00:49:08.892135" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:08.891715" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.892618" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:08.892323" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:08.892693" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:08.892945" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:08.891344" 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-10T00:49:08.893123" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.893780" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:08.893440" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.894223" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:08.893980" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.894632" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:08.894394" 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-10T00:49:08.895066" 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-10T00:49:08.895318" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:08.895175" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:08.895537" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:08.895398" 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-10T00:49:08.895755" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:08.895614" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:08.895156" elapsed="0.000674"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:08.894902" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:08.894705" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:08.895976" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:08.896180" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:08.896226" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:08.890607" elapsed="0.005643"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.896890" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:08.896971" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:08.896419" elapsed="0.000576"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:08.897565" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:08.897284" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:08.897067" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:08.897048" 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-10T00:49:08.897899" 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-10T00:49:08.898071" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:08.898136" 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-10T00:49:08.888138" elapsed="0.010105">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:08.887888" elapsed="0.010423">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:08.887733" elapsed="0.010632">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:08.887338" elapsed="0.011115">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:08.898680" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:08.861139" elapsed="0.037655">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:09.922673" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:49:09.923006" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:09.922027" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:09.921555" elapsed="0.001596"/>
</kw>
<msg time="2026-04-10T00:49:09.923197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:09.913516" elapsed="0.009725"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:09.913087" elapsed="0.010227"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.923778" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:09.923521" 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-10T00:49:09.929240" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:09.928809" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.929723" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:09.929431" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:09.929797" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:09.929979" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:09.928421" 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-10T00:49:09.930154" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.930825" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:09.930483" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.931269" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:09.931027" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.931728" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:09.931481" 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-10T00:49:09.932202" 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-10T00:49:09.932489" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:09.932313" 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-10T00:49:09.932786" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:09.932602" 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-10T00:49:09.933046" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:09.932887" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:09.932293" elapsed="0.000856"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:09.932028" elapsed="0.001156"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:09.931819" elapsed="0.001399"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:09.933265" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:09.933472" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:09.933524" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:09.927673" elapsed="0.005883"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.934155" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:09.934255" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:09.933811" elapsed="0.000475"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:09.934894" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:09.934583" elapsed="0.000388">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:09.934364" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:09.934345" 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-10T00:49:09.935224" 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-10T00:49:09.935396" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:09.935479" 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-10T00:49:09.924911" elapsed="0.010679">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:09.924643" elapsed="0.011018">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:09.924461" elapsed="0.011256">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:09.924066" elapsed="0.011741">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:09.936068" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:09.899678" elapsed="0.036507">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:10.962746" elapsed="0.000284"/>
</kw>
<msg time="2026-04-10T00:49:10.963103" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:10.962106" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:10.961633" elapsed="0.001648"/>
</kw>
<msg time="2026-04-10T00:49:10.963340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:10.952874" 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-10T00:49:10.952328" elapsed="0.011179"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.964057" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:10.963765" 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-10T00:49:10.969326" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:10.968897" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.969810" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:10.969515" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:10.969903" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:10.970067" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:10.968508" 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-10T00:49:10.970245" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.970970" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:10.970590" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.971486" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:10.971238" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.971922" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:10.971662" 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-10T00:49:10.972353" 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-10T00:49:10.972611" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:10.972464" 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-10T00:49:10.972835" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:10.972693" 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-10T00:49:10.973081" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:10.972932" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:10.972443" elapsed="0.000729"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:10.972183" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:10.971997" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:10.973262" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:49:10.973493" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:10.973553" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:10.967748" elapsed="0.005834"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.974235" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:10.974315" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:10.973758" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:10.974951" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:10.974633" elapsed="0.000400">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:10.974412" elapsed="0.000697">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:10.974393" 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-10T00:49:10.975297" 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-10T00:49:10.975481" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:10.975552" 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-10T00:49:10.965196" elapsed="0.010468">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:10.964933" elapsed="0.010803">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:10.964763" elapsed="0.011029">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:10.964342" elapsed="0.011558">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:10.976136" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:10.937020" elapsed="0.039233">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:12.001385" elapsed="0.000269"/>
</kw>
<msg time="2026-04-10T00:49:12.001726" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:12.000685" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:12.000220" elapsed="0.001765"/>
</kw>
<msg time="2026-04-10T00:49:12.002034" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:11.992118" elapsed="0.009964"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:11.991686" elapsed="0.010473"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.002641" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:12.002355" 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-10T00:49:12.008059" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:12.007614" elapsed="0.000473"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.008552" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:12.008251" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:12.008632" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:12.008802" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:12.007236" 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-10T00:49:12.008998" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.009714" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:12.009346" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.010174" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:12.009918" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.010638" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:12.010351" 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-10T00:49:12.011096" 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-10T00:49:12.011364" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:12.011211" 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-10T00:49:12.011591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:12.011448" 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-10T00:49:12.011815" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:12.011672" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:12.011189" elapsed="0.000719"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:12.010913" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:12.010713" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:12.012003" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:12.012214" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:12.012262" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:12.006484" elapsed="0.005803"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.012744" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:12.012825" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:12.012461" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:12.013468" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:12.013161" elapsed="0.000391">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:12.012939" elapsed="0.000726">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:12.012919" 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-10T00:49:12.013874" 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-10T00:49:12.014086" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:12.014168" 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-10T00:49:12.003752" elapsed="0.010534">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:12.003509" elapsed="0.010851">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:12.003359" 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-10T00:49:12.002945" elapsed="0.011604">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:12.014798" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:11.977099" elapsed="0.037842">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:13.040731" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:49:13.041055" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:13.040086" elapsed="0.001032"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:13.039608" elapsed="0.001591"/>
</kw>
<msg time="2026-04-10T00:49:13.041244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:13.031138" elapsed="0.010151"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:13.030704" elapsed="0.010659"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.041808" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:13.041552" 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-10T00:49:13.047134" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:13.046575" elapsed="0.000599"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.047794" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:13.047393" elapsed="0.000437"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:13.047917" elapsed="0.000044"/>
</return>
<msg time="2026-04-10T00:49:13.048136" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:13.046140" elapsed="0.002030"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:13.048377" elapsed="0.000217"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.049304" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:13.048811" elapsed="0.000530"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.049915" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:13.049561" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.050508" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:13.050181" elapsed="0.000363"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:13.051108" 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-10T00:49:13.051560" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:13.051353" 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-10T00:49:13.051889" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:13.051673" elapsed="0.000293"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:13.052196" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:13.052000" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:13.051324" elapsed="0.000977"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:13.050877" elapsed="0.001459"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:13.050607" elapsed="0.001765"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:13.052433" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:49:13.052712" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:13.052778" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:13.045376" elapsed="0.007435"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.053677" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:13.053787" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:13.053067" elapsed="0.000755"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:13.054592" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:13.054288" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:13.053942" elapsed="0.000784">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:13.053915" elapsed="0.000843">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:13.054925" 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-10T00:49:13.055098" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:13.055165" 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-10T00:49:13.042911" elapsed="0.012363">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:13.042665" elapsed="0.012679">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:13.042526" elapsed="0.012878">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:13.042125" elapsed="0.013370">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:13.055727" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:13.015814" elapsed="0.040027">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:14.080188" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:49:14.080505" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:14.079527" elapsed="0.001043"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:14.079071" elapsed="0.001578"/>
</kw>
<msg time="2026-04-10T00:49:14.080696" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:14.071042" elapsed="0.009701"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:14.070612" elapsed="0.010302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.081365" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:14.081106" 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-10T00:49:14.088097" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:14.087687" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.088573" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:14.088285" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:14.088648" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:14.088807" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:14.087316" elapsed="0.001516"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:14.089000" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.089674" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:14.089314" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.090111" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:14.089871" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.090518" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:14.090281" 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-10T00:49:14.090951" 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-10T00:49:14.091204" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:14.091059" 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-10T00:49:14.091427" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:14.091286" 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-10T00:49:14.091645" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:14.091504" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:14.091040" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:14.090769" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:14.090591" elapsed="0.001179"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:14.091810" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:14.092028" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:14.092075" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:14.086575" elapsed="0.005524"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.092543" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:14.092621" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:14.092268" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:14.093233" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:14.092942" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:14.092713" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:14.092695" 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-10T00:49:14.093571" 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-10T00:49:14.093744" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:14.093811" 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-10T00:49:14.082443" elapsed="0.011534">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:14.082208" elapsed="0.011867">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:14.082064" elapsed="0.012078">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:14.081652" elapsed="0.012583">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:14.094472" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:14.056667" elapsed="0.037922">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:15.120371" elapsed="0.000235"/>
</kw>
<msg time="2026-04-10T00:49:15.120672" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:15.119708" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:15.119250" elapsed="0.001564"/>
</kw>
<msg time="2026-04-10T00:49:15.120877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:15.111092" elapsed="0.009832"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:15.110655" elapsed="0.010391"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.121509" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:15.121248" 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-10T00:49:15.126685" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:15.126294" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.127191" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:15.126886" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:15.127268" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:15.127429" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:15.125925" 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-10T00:49:15.127604" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.128269" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:15.127937" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.128687" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:15.128450" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.129154" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:15.128872" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:15.129571" 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-10T00:49:15.129821" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:15.129677" 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-10T00:49:15.130056" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:15.129917" elapsed="0.000262"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:15.130346" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:15.130204" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:15.129657" elapsed="0.000764"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:15.129406" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:15.129227" elapsed="0.001243"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:15.130509" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:15.130709" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:15.130755" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:15.125201" elapsed="0.005577"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.131232" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:15.131309" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:15.130962" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:15.132090" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:15.131616" elapsed="0.000548">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:15.131402" elapsed="0.000829">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:15.131384" 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-10T00:49:15.132414" 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-10T00:49:15.132585" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:15.132651" 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-10T00:49:15.122656" elapsed="0.010102">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:15.122426" elapsed="0.010401">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:15.122284" elapsed="0.010615">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:15.121815" elapsed="0.011194">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:15.133247" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:15.095427" elapsed="0.037935">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:16.160727" elapsed="0.000281"/>
</kw>
<msg time="2026-04-10T00:49:16.161080" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:16.160036" elapsed="0.001113"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:16.159536" elapsed="0.001698"/>
</kw>
<msg time="2026-04-10T00:49:16.161282" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:16.150433" elapsed="0.010895"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:16.149838" elapsed="0.011578"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.161913" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:16.161623" 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-10T00:49:16.167291" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:16.166872" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.167805" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:16.167486" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:16.167905" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:16.168075" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:16.166382" elapsed="0.001719"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:16.168258" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.168991" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:16.168606" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.169701" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:16.169184" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.170171" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:16.169909" 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-10T00:49:16.170606" 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-10T00:49:16.170891" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:16.170726" 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-10T00:49:16.171115" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:16.170975" 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-10T00:49:16.171335" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:16.171194" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:16.170705" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:16.170434" elapsed="0.001003"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:16.170250" elapsed="0.001212"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:16.171502" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:16.171713" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:16.171762" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:16.165627" elapsed="0.006159"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.172255" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:16.172334" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:16.171972" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:16.172976" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:16.172663" elapsed="0.000388">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:16.172428" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:16.172410" 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-10T00:49:16.173307" 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-10T00:49:16.173503" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:16.173579" 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-10T00:49:16.163018" elapsed="0.010686">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:16.162758" elapsed="0.011033">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:16.162606" elapsed="0.011295">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:16.162199" elapsed="0.011813">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:16.174341" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:16.134295" elapsed="0.040176">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:17.201932" elapsed="0.000244"/>
</kw>
<msg time="2026-04-10T00:49:17.202246" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:17.201270" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:17.200793" elapsed="0.001596"/>
</kw>
<msg time="2026-04-10T00:49:17.202435" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:17.191242" elapsed="0.011237"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:17.190663" elapsed="0.011889"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.203067" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:17.202741" 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-10T00:49:17.208573" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:17.208180" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.209066" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:17.208759" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:17.209153" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:17.209312" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:17.207753" 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-10T00:49:17.209486" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.210155" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:17.209801" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.210578" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:17.210337" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.211002" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:17.210748" 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-10T00:49:17.211419" 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-10T00:49:17.211669" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:17.211526" 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-10T00:49:17.211899" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:17.211747" 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-10T00:49:17.212137" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:17.211977" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:17.211506" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:17.211255" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:17.211075" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:17.212378" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:17.212581" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:17.212628" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:17.207033" elapsed="0.005618"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.213115" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:17.213191" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:17.212821" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:17.213777" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:17.213502" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:17.213285" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:17.213266" 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-10T00:49:17.214111" 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-10T00:49:17.214282" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:17.214347" 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-10T00:49:17.204157" elapsed="0.010301">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:17.203895" elapsed="0.010637">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:17.203740" elapsed="0.010847">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:17.203348" elapsed="0.011330">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:17.214922" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:17.175301" elapsed="0.039737">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:18.242801" elapsed="0.000261"/>
</kw>
<msg time="2026-04-10T00:49:18.243132" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:18.242151" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:18.241670" elapsed="0.001606"/>
</kw>
<msg time="2026-04-10T00:49:18.243322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:18.232255" elapsed="0.011112"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:18.231655" elapsed="0.011792"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.243940" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:18.243667" 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-10T00:49:18.249109" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:18.248675" elapsed="0.000473"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.249698" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:18.249310" elapsed="0.000425"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:18.249801" elapsed="0.000063"/>
</return>
<msg time="2026-04-10T00:49:18.250130" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:18.248302" elapsed="0.001864"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:18.250377" elapsed="0.000217"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.251312" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:18.250815" elapsed="0.000535"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.251945" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:18.251586" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.252521" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:18.252187" elapsed="0.000370"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:18.253124" 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-10T00:49:18.253475" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:18.253272" elapsed="0.000280"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:18.253780" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:18.253587" elapsed="0.000295"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:18.254112" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:18.253917" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:18.253246" elapsed="0.000974"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:18.252895" elapsed="0.001358"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:18.252622" elapsed="0.001666"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:18.254343" elapsed="0.000040"/>
</return>
<msg time="2026-04-10T00:49:18.254622" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:18.254686" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:18.247567" elapsed="0.007152"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.255345" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:18.255458" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:18.254973" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:18.256534" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:18.256185" elapsed="0.000423">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:18.255619" elapsed="0.001055">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:18.255593" elapsed="0.001112">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:18.256869" 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-10T00:49:18.257041" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:18.257106" 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-10T00:49:18.245045" elapsed="0.012167">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:18.244799" elapsed="0.012480">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:18.244660" elapsed="0.012673">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:18.244263" elapsed="0.013159">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:18.257650" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:18.215987" elapsed="0.041778">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:19.283248" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:49:19.283579" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:19.282558" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:19.282088" elapsed="0.001639"/>
</kw>
<msg time="2026-04-10T00:49:19.283774" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:19.272968" elapsed="0.010851"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:19.272382" elapsed="0.011529"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.284362" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:19.284106" 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-10T00:49:19.289863" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:19.289463" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.290336" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:19.290050" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:19.290409" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:19.290570" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:19.289088" elapsed="0.001507"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:19.290745" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.291419" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:19.291085" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.291835" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:19.291600" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.292258" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:19.292021" 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-10T00:49:19.292675" 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-10T00:49:19.292944" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:19.292784" 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-10T00:49:19.293164" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:19.293025" 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-10T00:49:19.293378" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:19.293240" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:19.292765" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:19.292510" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:19.292331" elapsed="0.001171"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:19.293543" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:19.293741" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:19.293786" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:19.288360" elapsed="0.005449"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.294333" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:19.294410" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:19.294063" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:19.295008" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:19.294715" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:19.294502" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:19.294484" 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-10T00:49:19.295339" 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-10T00:49:19.295515" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:19.295582" 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-10T00:49:19.285649" elapsed="0.010041">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:19.285407" elapsed="0.010354">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:19.285079" elapsed="0.010738">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:19.284657" elapsed="0.011269">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:19.296171" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:19.258640" elapsed="0.037651">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:20.321225" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:49:20.321550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:20.320560" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:20.320100" elapsed="0.001599"/>
</kw>
<msg time="2026-04-10T00:49:20.321746" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:20.311975" elapsed="0.009814"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:20.311551" elapsed="0.010328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.322329" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:20.322072" 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-10T00:49:20.327439" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:20.327047" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.327929" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:20.327626" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:20.328003" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:20.328162" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:20.326660" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:20.328336" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.328998" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:20.328648" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.329492" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:20.329251" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.329915" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:20.329663" 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-10T00:49:20.330334" 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-10T00:49:20.330616" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:20.330444" 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-10T00:49:20.330840" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:20.330700" 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-10T00:49:20.331074" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:20.330934" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:20.330424" elapsed="0.000724"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:20.330169" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:20.329988" elapsed="0.001210"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:20.331240" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:20.331439" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:20.331485" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:20.325929" elapsed="0.005579"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.331959" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:20.332036" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:20.331675" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:20.332805" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:20.332518" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:20.332297" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:20.332109" 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-10T00:49:20.333146" 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-10T00:49:20.333317" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:20.333383" 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-10T00:49:20.323429" elapsed="0.010062">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:20.323193" elapsed="0.010368">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:20.323046" elapsed="0.010573">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:20.322628" elapsed="0.011082">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:20.333956" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:20.297125" elapsed="0.036948">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:21.359650" elapsed="0.000262"/>
</kw>
<msg time="2026-04-10T00:49:21.359981" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:21.359000" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:21.358521" elapsed="0.001700"/>
</kw>
<msg time="2026-04-10T00:49:21.360269" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:21.350388" elapsed="0.009926"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:21.349953" elapsed="0.010435"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.360831" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:21.360573" 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-10T00:49:21.366071" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:21.365669" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.366562" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:21.366274" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:21.366636" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:21.366793" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:21.365302" elapsed="0.001516"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:21.366984" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.367634" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:21.367296" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.368071" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:21.367816" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.368477" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:21.368240" 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-10T00:49:21.368906" 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-10T00:49:21.369156" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:21.369014" elapsed="0.000196"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:21.369371" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:21.369235" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:21.369584" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:21.369448" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:21.368994" elapsed="0.000663"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:21.368727" elapsed="0.000953"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:21.368549" elapsed="0.001156"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:21.369744" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:49:21.369955" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:21.370001" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:21.364569" elapsed="0.005455"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.370474" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:21.370549" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:21.370205" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:21.371144" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:21.370865" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:21.370640" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:21.370622" 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-10T00:49:21.371503" 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-10T00:49:21.371674" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:21.371739" 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-10T00:49:21.361907" elapsed="0.009954">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:21.361656" elapsed="0.010279">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:21.361515" elapsed="0.010474">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:21.361119" elapsed="0.010960">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:21.372310" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:21.334953" elapsed="0.037473">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:22.397089" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:49:22.397399" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:22.396419" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:22.395956" elapsed="0.001586"/>
</kw>
<msg time="2026-04-10T00:49:22.397589" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:22.387912" elapsed="0.009739"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:22.387439" elapsed="0.010289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.398193" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:22.397932" 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-10T00:49:22.403257" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:22.402856" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.403743" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:22.403450" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:22.403817" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:49:22.403994" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:22.402469" 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-10T00:49:22.404170" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.404831" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:22.404494" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.405285" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:22.405031" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.405721" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:22.405458" 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-10T00:49:22.406169" 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-10T00:49:22.406513" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:22.406358" 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-10T00:49:22.406743" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:22.406595" 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-10T00:49:22.406977" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:22.406820" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:22.406338" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:22.406000" elapsed="0.001077"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:22.405797" elapsed="0.001305"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:22.407142" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:22.407344" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:22.407391" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:22.401736" elapsed="0.005678"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.409377" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:22.409459" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:22.407584" elapsed="0.001901"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:22.410104" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:22.409797" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:22.409558" elapsed="0.000682">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:22.409538" 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-10T00:49:22.410425" 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-10T00:49:22.410596" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:22.410662" 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-10T00:49:22.399251" elapsed="0.011519">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:22.399019" elapsed="0.011838">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:22.398875" elapsed="0.012040">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:22.398465" elapsed="0.012547">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:22.411247" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:22.373210" elapsed="0.038153">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:23.435751" elapsed="0.000286"/>
</kw>
<msg time="2026-04-10T00:49:23.436104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:23.435102" elapsed="0.001067"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:23.434613" elapsed="0.001636"/>
</kw>
<msg time="2026-04-10T00:49:23.436295" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:23.426507" elapsed="0.009833"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:23.426095" elapsed="0.010542"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.437150" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:23.436828" 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-10T00:49:23.442640" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:23.442248" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.443135" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:23.442828" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:23.443209" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:23.443380" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:23.441866" 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-10T00:49:23.443576" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.444281" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:23.443928" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.444715" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:23.444468" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.445186" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:23.444907" 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-10T00:49:23.445621" 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-10T00:49:23.445893" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:23.445729" 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-10T00:49:23.446114" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:23.445974" 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-10T00:49:23.446330" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:23.446190" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:23.445709" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:23.445447" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:23.445262" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:23.446494" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:23.446696" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:23.446742" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:23.441073" elapsed="0.005693"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.447231" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:23.447308" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:23.446954" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:23.447915" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:23.447618" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:23.447401" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:23.447382" 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-10T00:49:23.448245" 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-10T00:49:23.448419" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:23.448483" 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-10T00:49:23.438262" elapsed="0.010372">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:23.438018" elapsed="0.010690">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:23.437823" elapsed="0.010942">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:23.437426" 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-10T00:49:23.449124" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:23.412208" elapsed="0.037037">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:24.476072" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:49:24.476392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:24.475400" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:24.474935" elapsed="0.001612"/>
</kw>
<msg time="2026-04-10T00:49:24.476593" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:24.465765" elapsed="0.010884"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:24.465201" elapsed="0.011523"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.477188" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:24.476928" 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-10T00:49:24.482260" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:24.481870" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.482732" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:24.482444" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:24.482805" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:24.482987" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:24.481488" 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-10T00:49:24.483160" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.483810" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:24.483475" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.484252" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:24.484010" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.484816" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:24.484426" 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-10T00:49:24.485258" 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-10T00:49:24.485508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:24.485366" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:24.485731" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:24.485592" 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-10T00:49:24.486048" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:24.485901" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:24.485347" elapsed="0.000776"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:24.485092" elapsed="0.001055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:24.484908" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:24.486212" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:24.486410" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:24.486456" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:24.480764" elapsed="0.005715"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.486934" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:24.487013" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:24.486648" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:24.487782" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:24.487318" elapsed="0.000555">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:24.487105" elapsed="0.000837">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:24.487087" 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-10T00:49:24.488124" 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-10T00:49:24.488310" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:24.488378" 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-10T00:49:24.478256" elapsed="0.010230">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:24.478022" elapsed="0.010539">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:24.477876" elapsed="0.010738">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:24.477465" elapsed="0.011253">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:24.488971" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:24.450080" elapsed="0.039007">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:25.514347" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:49:25.514665" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:25.513664" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:25.513188" elapsed="0.001627"/>
</kw>
<msg time="2026-04-10T00:49:25.514879" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:25.505027" elapsed="0.009898"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:25.504570" elapsed="0.010432"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.515466" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:25.515203" 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-10T00:49:25.520759" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:25.520356" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.521273" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:25.520965" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:25.521351" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:49:25.521516" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:25.519858" 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-10T00:49:25.521697" elapsed="0.000178"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.522392" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:25.522039" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.523051" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:25.522578" elapsed="0.000500"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.523485" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:25.523236" 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-10T00:49:25.523939" 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-10T00:49:25.524238" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:25.524053" elapsed="0.000246"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:25.524466" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:25.524325" 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-10T00:49:25.524685" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:25.524545" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:25.524033" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:25.523747" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:25.523562" elapsed="0.001251"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:25.524870" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:25.525079" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:25.525126" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:25.519120" elapsed="0.006030"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.525618" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:25.525695" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:25.525336" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:25.526323" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:25.526027" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:25.525791" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:25.525772" 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-10T00:49:25.526654" 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-10T00:49:25.526825" elapsed="0.000036"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:25.526909" 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-10T00:49:25.516577" elapsed="0.010442">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:25.516334" elapsed="0.010756">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:25.516188" 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-10T00:49:25.515747" 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-10T00:49:25.527520" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:25.489959" elapsed="0.037682">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:26.551149" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:49:26.551459" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:26.550483" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:26.550024" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:49:26.551665" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:26.542046" elapsed="0.009665"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:26.541625" elapsed="0.010160"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.552244" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:26.551988" 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-10T00:49:26.557626" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:26.557133" elapsed="0.000541"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.558207" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:26.557913" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:26.558281" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:26.558441" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:26.556749" 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-10T00:49:26.558616" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.559319" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:26.558943" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.559772" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:26.559502" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.560202" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:26.559962" 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-10T00:49:26.560618" 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-10T00:49:26.560889" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:26.560725" 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-10T00:49:26.561109" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:26.560970" 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-10T00:49:26.561322" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:26.561185" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:26.560705" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:26.560454" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:26.560274" elapsed="0.001170"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:26.561551" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:26.561756" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:26.561802" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:26.556036" elapsed="0.005789"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.562287" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:26.562364" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:26.562014" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:26.562965" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:26.562670" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:26.562457" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:26.562438" 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-10T00:49:26.563284" 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-10T00:49:26.563453" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:26.563518" 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-10T00:49:26.553304" elapsed="0.010321">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:26.553069" elapsed="0.010643">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:26.552928" 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-10T00:49:26.552515" 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-10T00:49:26.564105" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:26.528476" elapsed="0.035744">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:27.590439" elapsed="0.000276"/>
</kw>
<msg time="2026-04-10T00:49:27.590784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:27.589731" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:27.589190" elapsed="0.001772"/>
</kw>
<msg time="2026-04-10T00:49:27.591016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:27.580871" elapsed="0.010200"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:27.580337" elapsed="0.010816"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.591687" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:27.591409" 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-10T00:49:27.597263" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:27.596754" elapsed="0.000540"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.597756" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:27.597458" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:27.597832" elapsed="0.000054"/>
</return>
<msg time="2026-04-10T00:49:27.598111" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:27.596361" elapsed="0.001776"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:27.598292" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.599008" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:27.598623" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.599480" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:27.599232" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.599908" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:27.599652" 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-10T00:49:27.600355" 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-10T00:49:27.600613" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:27.600465" 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-10T00:49:27.600832" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:27.600693" 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-10T00:49:27.601068" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:27.600926" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:27.600445" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:27.600178" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:27.599985" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:27.601232" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:27.601463" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:27.601515" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:27.595586" elapsed="0.005956"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.602066" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:27.602148" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:27.601730" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:27.603003" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:27.602692" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:27.602245" elapsed="0.000896">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:27.602226" elapsed="0.000967">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:27.603353" 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-10T00:49:27.603525" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:27.603607" 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-10T00:49:27.593024" elapsed="0.010705">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:27.592766" elapsed="0.011034">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:27.592620" elapsed="0.011255">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:27.592199" elapsed="0.011771">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:27.604213" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:27.565072" elapsed="0.039261">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:28.629403" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:49:28.629709" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:28.628734" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:28.628268" elapsed="0.001601"/>
</kw>
<msg time="2026-04-10T00:49:28.629917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:28.620152" elapsed="0.009811"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:28.619710" elapsed="0.010326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.630495" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:28.630237" 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-10T00:49:28.635964" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:28.635559" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.636439" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:28.636152" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:28.636513" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:28.636670" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:28.635190" elapsed="0.001504"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:28.636858" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.637556" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:28.637193" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.638073" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:28.637769" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.638492" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:28.638250" 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-10T00:49:28.638958" 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-10T00:49:28.639212" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:28.639067" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:28.639433" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:28.639293" 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-10T00:49:28.639649" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:28.639509" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:28.639047" elapsed="0.000676"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:28.638769" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:28.638566" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:28.639813" elapsed="0.000042"/>
</return>
<msg time="2026-04-10T00:49:28.640029" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:28.640076" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:28.634424" elapsed="0.005675"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.640612" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:28.640691" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:28.640338" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:28.641298" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:28.641018" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:28.640786" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:28.640767" 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-10T00:49:28.641618" 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-10T00:49:28.641789" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:28.641870" 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-10T00:49:28.631759" elapsed="0.010221">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:28.631523" elapsed="0.010527">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:28.631380" elapsed="0.010725">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:28.630781" elapsed="0.011414">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:28.642425" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:28.605254" elapsed="0.037286">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:29.667996" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:49:29.668309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:29.667323" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:29.666857" elapsed="0.001595"/>
</kw>
<msg time="2026-04-10T00:49:29.668498" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:29.658798" elapsed="0.009744"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:29.658386" elapsed="0.010231"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.669086" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:29.668808" 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-10T00:49:29.674226" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:29.673796" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.674719" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:29.674421" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:29.674793" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:29.674973" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:29.673419" 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-10T00:49:29.675150" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.675809" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:29.675466" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.676328" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:29.676078" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.676745" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:29.676502" 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-10T00:49:29.677189" 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-10T00:49:29.677448" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:29.677299" 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-10T00:49:29.677683" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:29.677535" 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-10T00:49:29.677920" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:29.677761" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:29.677279" elapsed="0.000719"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:29.677020" elapsed="0.001002"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:29.676819" elapsed="0.001230"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:29.678090" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:29.678324" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:29.678371" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:29.672684" elapsed="0.005711"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.679033" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:29.679113" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:29.678568" elapsed="0.000569"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:29.679714" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:29.679428" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:29.679208" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:29.679188" 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-10T00:49:29.680061" 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-10T00:49:29.680236" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:29.680302" 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-10T00:49:29.670170" elapsed="0.010242">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:29.669933" elapsed="0.010550">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:29.669770" elapsed="0.010769">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:29.669372" elapsed="0.011258">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:29.680879" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:29.643362" elapsed="0.037635">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:30.706349" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:49:30.706656" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:30.705672" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:30.705208" elapsed="0.001689"/>
</kw>
<msg time="2026-04-10T00:49:30.706946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:30.696226" elapsed="0.010787"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:30.695624" elapsed="0.011465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.707567" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:30.707307" 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-10T00:49:30.712897" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:30.712476" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.713406" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:30.713106" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:30.713481" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:30.713643" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:30.712086" 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-10T00:49:30.713862" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.714518" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:30.714181" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.714955" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:30.714699" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.715361" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:30.715124" 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-10T00:49:30.715784" 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-10T00:49:30.716051" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:30.715906" 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-10T00:49:30.716267" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:30.716129" 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-10T00:49:30.716481" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:30.716343" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:30.715886" elapsed="0.000668"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:30.715622" elapsed="0.000956"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:30.715439" elapsed="0.001163"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:30.716641" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:49:30.716838" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:30.716900" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:30.711330" elapsed="0.005594"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.717360" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:30.717437" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:30.717092" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:30.718049" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:30.717754" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:30.717527" elapsed="0.000697">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:30.717510" 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-10T00:49:30.718407" 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-10T00:49:30.718579" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:30.718645" 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-10T00:49:30.708618" elapsed="0.010134">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:30.708386" elapsed="0.010436">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:30.708248" elapsed="0.010645">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:30.707838" elapsed="0.011145">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:30.719214" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:30.681946" elapsed="0.037383">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:31.746431" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:49:31.746740" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:31.745768" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:31.745299" elapsed="0.001599"/>
</kw>
<msg time="2026-04-10T00:49:31.746946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:31.737021" elapsed="0.009971"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:31.736424" elapsed="0.010642"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.747507" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:31.747251" 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-10T00:49:31.752577" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:31.752186" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.753075" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:31.752764" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:31.753149" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:31.753335" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:31.751800" 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-10T00:49:31.753513" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.754183" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:31.753829" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.754606" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:31.754367" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.755035" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:31.754778" 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-10T00:49:31.755453" 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-10T00:49:31.755802" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:31.755627" elapsed="0.000249"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:31.756043" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:31.755901" 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-10T00:49:31.756257" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:31.756119" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:31.755607" elapsed="0.000723"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:31.755288" elapsed="0.001067"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:31.755108" elapsed="0.001271"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:31.756418" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:31.756618" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:31.756664" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:31.751081" elapsed="0.005606"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.757153" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:31.757244" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:31.756868" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:31.758034" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:31.757554" elapsed="0.000553">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:31.757338" elapsed="0.000835">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:31.757320" elapsed="0.000884">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:31.758356" 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-10T00:49:31.758526" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:31.758591" 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-10T00:49:31.748555" elapsed="0.010141">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:31.748327" elapsed="0.010438">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:31.748186" elapsed="0.010631">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:31.747774" elapsed="0.011152">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:31.759155" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:31.720174" elapsed="0.039097">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:32.785916" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:49:32.786220" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:32.785250" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:32.784773" elapsed="0.001592"/>
</kw>
<msg time="2026-04-10T00:49:32.786412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:32.776732" elapsed="0.009725"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:32.776232" elapsed="0.010386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.787088" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:32.786812" 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-10T00:49:32.792209" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:32.791805" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.792684" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:32.792394" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:32.792772" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:32.792946" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:32.791437" 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-10T00:49:32.793122" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.793766" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:32.793435" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.794409" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:32.793961" elapsed="0.000475"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.794831" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:32.794587" 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-10T00:49:32.795284" 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-10T00:49:32.795538" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:32.795393" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:32.795754" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:32.795617" 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-10T00:49:32.796046" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:32.795895" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:32.795374" elapsed="0.000748"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:32.795103" elapsed="0.001043"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:32.794921" elapsed="0.001250"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:32.796210" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:32.796411" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:32.796457" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:32.790709" elapsed="0.005771"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.796967" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:32.797043" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:32.796647" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:32.797626" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:32.797349" elapsed="0.000346">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:32.797135" elapsed="0.000626">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:32.797117" elapsed="0.000675">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:32.797958" 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-10T00:49:32.798130" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:32.798196" 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-10T00:49:32.788148" elapsed="0.010195">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:32.787914" elapsed="0.010501">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:32.787759" elapsed="0.010712">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:32.787361" elapsed="0.011200">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:32.798792" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:32.760043" elapsed="0.038881">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:33.825211" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:49:33.825529" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:33.824543" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:33.824052" elapsed="0.001623"/>
</kw>
<msg time="2026-04-10T00:49:33.825721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:33.816044" elapsed="0.009723"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:33.815611" elapsed="0.010230"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.826310" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:33.826049" 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-10T00:49:33.831650" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:33.831236" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.832158" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:33.831840" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:33.832233" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:49:33.832411" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:33.830861" 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-10T00:49:33.832588" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.833295" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:33.832949" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.833720" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:33.833478" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.834214" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:33.833949" 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-10T00:49:33.834641" 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-10T00:49:33.834905" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:33.834747" 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-10T00:49:33.835123" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:33.834986" elapsed="0.000251"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:33.835402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:33.835262" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:33.834728" elapsed="0.000747"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:33.834471" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:33.834289" elapsed="0.001236"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:33.835564" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:33.835766" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:33.835812" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:33.830127" elapsed="0.005709"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.836321" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:33.836400" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:33.836022" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:33.837008" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:33.836710" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:33.836494" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:33.836475" 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-10T00:49:33.837339" 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-10T00:49:33.837526" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:33.837599" 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-10T00:49:33.827373" elapsed="0.010345">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:33.827138" elapsed="0.010650">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:33.826998" elapsed="0.010861">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:33.826584" elapsed="0.011367">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:33.838183" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:33.799714" elapsed="0.038586">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:34.864119" elapsed="0.000262"/>
</kw>
<msg time="2026-04-10T00:49:34.864451" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:34.863417" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:34.862960" elapsed="0.001691"/>
</kw>
<msg time="2026-04-10T00:49:34.864702" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:34.854238" elapsed="0.010510"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:34.853641" elapsed="0.011180"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.865288" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:34.865029" 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-10T00:49:34.870445" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:34.870052" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.870942" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:34.870632" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:34.871017" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:34.871179" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:34.869592" 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-10T00:49:34.871355" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.872046" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:34.871673" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.872475" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:34.872230" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.872907" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:34.872648" 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-10T00:49:34.873331" 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-10T00:49:34.873582" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:34.873438" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:34.873796" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:34.873660" 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-10T00:49:34.874030" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:34.873890" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:34.873419" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:34.873167" elapsed="0.000960"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:34.872982" elapsed="0.001171"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:34.874192" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:49:34.874390" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:34.874437" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:34.868874" elapsed="0.005587"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.874913" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:34.874991" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:34.874629" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:34.875764" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:34.875299" elapsed="0.000566">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:34.875083" elapsed="0.000850">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:34.875065" elapsed="0.000900">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:34.876119" 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-10T00:49:34.876289" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:34.876354" 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-10T00:49:34.866350" elapsed="0.010111">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:34.866116" elapsed="0.010412">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:34.865969" elapsed="0.010613">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:34.865559" elapsed="0.011112">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:34.876958" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:34.839136" elapsed="0.037938">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:35.904586" elapsed="0.000313"/>
</kw>
<msg time="2026-04-10T00:49:35.904972" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:35.903882" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:35.903397" elapsed="0.001752"/>
</kw>
<msg time="2026-04-10T00:49:35.905198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:35.894982" 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-10T00:49:35.894533" elapsed="0.010790"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.905857" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:35.905548" 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-10T00:49:35.912706" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:35.912195" elapsed="0.000550"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.913374" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:35.912976" elapsed="0.000434"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:35.913470" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:49:35.913686" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:35.911683" elapsed="0.002039"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:35.913951" elapsed="0.000218"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.915139" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:35.914390" elapsed="0.000787"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.915768" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:35.915439" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.916322" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:35.916029" elapsed="0.000321"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:35.916762" 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-10T00:49:35.917093" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:35.916942" 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-10T00:49:35.917314" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:35.917176" 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-10T00:49:35.917531" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:35.917392" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:35.916919" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:35.916589" elapsed="0.001042"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:35.916400" elapsed="0.001257"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:35.917765" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:35.917994" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:35.918041" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:35.910704" elapsed="0.007361"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.918518" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:35.918596" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:35.918237" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:35.919214" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:35.918927" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:35.918691" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:35.918672" elapsed="0.000732">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:35.919558" 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-10T00:49:35.919729" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:35.919795" 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-10T00:49:35.907167" elapsed="0.012756">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:35.906867" elapsed="0.013128">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:35.906680" 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-10T00:49:35.906186" elapsed="0.013959">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:35.920379" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:35.877928" elapsed="0.042569">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:36.946072" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:49:36.946411" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:36.945365" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:36.944884" elapsed="0.001680"/>
</kw>
<msg time="2026-04-10T00:49:36.946611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:36.936641" elapsed="0.010028"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:36.936202" elapsed="0.010558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.947252" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:36.946986" 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-10T00:49:36.952860" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:36.952443" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.953342" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:36.953052" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:36.953417" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:36.953668" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:36.952069" 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-10T00:49:36.953879" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.954557" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:36.954210" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.955055" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:36.954743" elapsed="0.000339"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.955474" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:36.955232" 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-10T00:49:36.955936" 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-10T00:49:36.956195" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:36.956049" 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-10T00:49:36.956413" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:36.956277" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:36.956628" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:36.956491" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:36.956030" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:36.955733" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:36.955549" elapsed="0.001204"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:36.956794" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:49:36.957025" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:36.957071" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:36.951310" elapsed="0.005784"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.957538" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:36.957615" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:36.957265" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:36.958232" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:36.957948" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:36.957709" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:36.957691" 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-10T00:49:36.958559" 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-10T00:49:36.958728" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:36.958810" 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-10T00:49:36.948414" elapsed="0.010540">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:36.948139" elapsed="0.010887">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:36.947993" elapsed="0.011088">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:36.947552" elapsed="0.011619">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:36.959403" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:36.921417" elapsed="0.038103">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:37.984549" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:49:37.984865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:37.983879" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:37.983408" elapsed="0.001601"/>
</kw>
<msg time="2026-04-10T00:49:37.985056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:37.975396" elapsed="0.009706"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:37.974985" elapsed="0.010192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.985626" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:37.985365" 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-10T00:49:37.990727" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:37.990329" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.991226" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:37.990931" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:37.991300" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:37.991459" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:37.989947" 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-10T00:49:37.991637" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.992309" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:37.991966" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.992731" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:37.992491" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.993155" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:37.992917" 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-10T00:49:37.993570" 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-10T00:49:37.993819" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:37.993676" 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-10T00:49:37.994054" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:37.993914" 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-10T00:49:37.994270" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:37.994131" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:37.993657" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:37.993406" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:37.993228" elapsed="0.001189"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:37.994460" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:37.994660" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:37.994706" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:37.989220" elapsed="0.005511"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.995250" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:37.995329" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:37.994976" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:37.996124" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:37.995819" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:37.995596" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:37.995405" 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-10T00:49:37.996447" 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-10T00:49:37.996620" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:37.996691" 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-10T00:49:37.986723" elapsed="0.010077">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:37.986459" elapsed="0.010428">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:37.986305" 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-10T00:49:37.985913" elapsed="0.011121">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:37.997266" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:37.960416" elapsed="0.036966">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:39.021426" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:49:39.021739" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:39.020741" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:39.020280" elapsed="0.001635"/>
</kw>
<msg time="2026-04-10T00:49:39.021964" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:39.012295" elapsed="0.009716"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:39.011884" elapsed="0.010203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.022544" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:39.022278" 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-10T00:49:39.027861" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:39.027453" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.028340" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:39.028049" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:39.028415" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:39.028574" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:39.027084" 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-10T00:49:39.028755" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.029422" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:39.029086" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.029989" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:39.029680" elapsed="0.000337"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.030484" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:39.030197" 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-10T00:49:39.031002" 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-10T00:49:39.031285" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:39.031137" 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-10T00:49:39.031510" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:39.031369" 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-10T00:49:39.031730" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:39.031589" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:39.031112" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:39.030783" elapsed="0.001047"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:39.030569" elapsed="0.001313"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:39.031927" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:49:39.032144" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:39.032192" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:39.026345" elapsed="0.005872"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.032666" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:39.032746" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:39.032390" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:39.033367" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:39.033084" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:39.032864" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:39.032829" 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-10T00:49:39.033690" 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-10T00:49:39.033895" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:39.033965" 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-10T00:49:39.023640" elapsed="0.010436">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:39.023405" elapsed="0.010742">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:39.023263" elapsed="0.010940">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:39.022822" 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-10T00:49:39.034525" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:38.998349" elapsed="0.036295">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:40.059556" elapsed="0.000235"/>
</kw>
<msg time="2026-04-10T00:49:40.059868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:40.058911" elapsed="0.001019"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:40.058435" elapsed="0.001641"/>
</kw>
<msg time="2026-04-10T00:49:40.060124" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:40.050375" elapsed="0.009794"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:40.049972" elapsed="0.010273"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.060687" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:40.060430" 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-10T00:49:40.065751" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:40.065327" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.066246" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:40.065953" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:40.066320" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:40.066479" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:40.064959" 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-10T00:49:40.066653" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.067320" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:40.066982" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.067742" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:40.067501" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.068167" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:40.067927" 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-10T00:49:40.068589" 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-10T00:49:40.068854" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:40.068697" 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-10T00:49:40.069074" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:40.068935" 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-10T00:49:40.069293" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:40.069152" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:40.068677" elapsed="0.000765"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:40.068424" elapsed="0.001046"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:40.068240" elapsed="0.001256"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:40.069539" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:40.069746" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:40.069793" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:40.064225" elapsed="0.005592"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.071920" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:40.072008" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:40.070012" elapsed="0.002021"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:40.072606" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:40.072324" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:40.072104" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:40.072085" 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-10T00:49:40.072985" 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-10T00:49:40.073154" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:40.073219" 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-10T00:49:40.061747" elapsed="0.011578">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:40.061519" elapsed="0.011897">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:40.061373" elapsed="0.012097">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:40.060970" elapsed="0.012587">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:40.073800" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:40.035496" elapsed="0.038473">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:41.102019" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:49:41.102345" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:41.101324" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:41.100819" elapsed="0.001674"/>
</kw>
<msg time="2026-04-10T00:49:41.102538" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:41.092743" elapsed="0.009839"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:41.092295" elapsed="0.010360"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.103124" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:41.102867" 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-10T00:49:41.108473" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:41.108082" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.108987" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:41.108661" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:41.109062" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:41.109224" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:41.107693" 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-10T00:49:41.109402" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.110071" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:41.109718" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.110490" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:41.110252" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.110913" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:41.110660" 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-10T00:49:41.111352" 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-10T00:49:41.111686" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:41.111539" 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-10T00:49:41.111920" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:41.111767" 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-10T00:49:41.112140" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:41.112000" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:41.111518" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:41.111172" elapsed="0.001069"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:41.110986" elapsed="0.001282"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:41.112309" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:41.112511" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:41.112557" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:41.106967" elapsed="0.005613"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.113079" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:41.113157" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:41.112750" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:41.113746" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:41.113464" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:41.113249" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:41.113231" 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-10T00:49:41.114093" 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-10T00:49:41.114264" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:41.114329" 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-10T00:49:41.104203" elapsed="0.010236">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:41.103964" elapsed="0.010546">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:41.103802" elapsed="0.010763">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:41.103404" elapsed="0.011251">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:41.114906" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:41.074806" elapsed="0.040218">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:42.140329" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:49:42.140641" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:42.139664" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:42.139205" elapsed="0.001582"/>
</kw>
<msg time="2026-04-10T00:49:42.140833" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:42.130534" 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-10T00:49:42.129974" elapsed="0.011066"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.141493" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:42.141231" 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-10T00:49:42.146633" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:42.146248" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.147125" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:42.146820" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:42.147200" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:42.147364" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:42.145879" elapsed="0.001510"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:42.147540" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.148203" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:42.147866" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.148643" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:42.148400" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.149075" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:42.148815" 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-10T00:49:42.149491" 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-10T00:49:42.149742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:42.149599" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:42.149979" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:42.149823" 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-10T00:49:42.150196" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:42.150055" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:42.149579" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:42.149327" elapsed="0.000968"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:42.149148" elapsed="0.001172"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:42.150360" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:42.150564" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:42.150611" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:42.145102" elapsed="0.005532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.151089" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:42.151167" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:42.150803" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:42.151954" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:42.151472" elapsed="0.000555">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:42.151259" elapsed="0.000838">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:42.151241" 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-10T00:49:42.152283" 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-10T00:49:42.152487" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:42.152556" 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-10T00:49:42.142548" elapsed="0.010162">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:42.142318" elapsed="0.010469">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:42.142181" elapsed="0.010674">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:42.141769" elapsed="0.011178">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:42.153182" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:42.115819" elapsed="0.037480">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:43.180225" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:49:43.180549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:43.179530" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:43.179040" elapsed="0.001660"/>
</kw>
<msg time="2026-04-10T00:49:43.180748" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:43.169478" elapsed="0.011318"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:43.168897" elapsed="0.011992"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.181378" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:43.181088" 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-10T00:49:43.186657" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:43.186253" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.187168" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:43.186863" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:43.187261" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:49:43.187434" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:43.185870" 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-10T00:49:43.187616" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.188341" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:43.187987" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.189008" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:43.188528" elapsed="0.000508"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.189455" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:43.189192" 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-10T00:49:43.189908" 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-10T00:49:43.190177" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:43.190024" 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-10T00:49:43.190403" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:43.190262" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:43.190724" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:43.190574" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:43.190002" elapsed="0.000800"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:43.189717" elapsed="0.001111"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:43.189532" elapsed="0.001339"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:43.190913" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:43.191124" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:43.191171" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:43.185101" elapsed="0.006102"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.191662" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:43.191741" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:43.191381" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:43.192382" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:43.192090" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:43.191836" elapsed="0.000695">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:43.191817" 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-10T00:49:43.192721" 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-10T00:49:43.192920" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:43.192991" 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-10T00:49:43.182515" elapsed="0.010593">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:43.182276" elapsed="0.010906">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:43.182132" elapsed="0.011111">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:43.181710" elapsed="0.011627">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:43.193574" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:43.154230" elapsed="0.039467">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:44.219338" elapsed="0.000290"/>
</kw>
<msg time="2026-04-10T00:49:44.219699" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:44.218635" elapsed="0.001131"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:44.218163" elapsed="0.001701"/>
</kw>
<msg time="2026-04-10T00:49:44.219914" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:44.209299" elapsed="0.010663"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:44.208661" elapsed="0.011381"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.220507" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:44.220240" 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-10T00:49:44.226164" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:44.225714" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.226679" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:44.226365" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:44.226759" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:49:44.226947" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:44.225246" elapsed="0.001729"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:44.227135" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.227900" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:44.227521" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.228364" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:44.228095" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.228809" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:44.228545" 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-10T00:49:44.229278" 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-10T00:49:44.229544" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:44.229393" 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-10T00:49:44.229770" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:44.229628" 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-10T00:49:44.230016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:44.229868" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:44.229373" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:44.229096" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:44.228905" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:44.230191" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:49:44.230407" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:44.230456" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:44.224457" elapsed="0.006025"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.230973" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:44.231055" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:44.230659" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:44.231707" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:44.231385" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:44.231154" elapsed="0.000730">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:44.231133" 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-10T00:49:44.232078" 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-10T00:49:44.232261" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:44.232333" 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-10T00:49:44.221603" elapsed="0.010845">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:44.221362" elapsed="0.011159">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:44.221215" elapsed="0.011364">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:44.220785" 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-10T00:49:44.232981" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:44.194497" elapsed="0.038613">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:45.257877" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:49:45.258198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:45.257211" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:45.256732" elapsed="0.001612"/>
</kw>
<msg time="2026-04-10T00:49:45.258391" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:45.248639" elapsed="0.009797"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:45.248227" elapsed="0.010283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.259031" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:45.258703" 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-10T00:49:45.264094" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:45.263683" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.264572" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:45.264280" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:45.264647" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:45.264805" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:45.263314" elapsed="0.001516"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:45.265001" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.265657" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:45.265319" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.266147" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:45.265855" elapsed="0.000318"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.266556" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:45.266321" 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-10T00:49:45.267037" 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-10T00:49:45.267293" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:45.267149" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:45.267509" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:45.267372" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:45.267723" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:45.267585" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:45.267129" elapsed="0.000667"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:45.266809" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:45.266628" elapsed="0.001231"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:45.267967" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:45.268172" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:45.268218" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:45.262559" elapsed="0.005683"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.268688" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:45.268766" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:45.268413" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:45.269562" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:45.269277" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:45.268881" elapsed="0.000820">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:45.268861" 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-10T00:49:45.269901" 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-10T00:49:45.270075" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:45.270141" 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-10T00:49:45.260092" elapsed="0.010159">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:45.259858" elapsed="0.010462">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:45.259700" elapsed="0.010676">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:45.259306" elapsed="0.011161">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:45.270698" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:45.233955" elapsed="0.036859">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.297340" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:49:46.297662" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.296672" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:46.296212" elapsed="0.001595"/>
</kw>
<msg time="2026-04-10T00:49:46.297868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.286930" elapsed="0.010984"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:46.286331" elapsed="0.011657"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.298433" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.298178" 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-10T00:49:46.303697" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.303312" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.304189" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.303898" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.304262" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:46.304503" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.302941" 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-10T00:49:46.304682" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.305377" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.305037" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.305800" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.305561" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.306232" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.305989" 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-10T00:49:46.306693" 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-10T00:49:46.306961" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.306802" 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-10T00:49:46.307180" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.307042" 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-10T00:49:46.307397" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.307258" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.306783" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.306523" elapsed="0.000971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.306306" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:46.307560" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:46.307760" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:46.307807" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:46.302168" elapsed="0.005664"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.308287" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.308365" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.308017" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.308973" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.308671" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:46.308457" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:46.308439" 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-10T00:49:46.309293" 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-10T00:49:46.309462" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.309527" 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-10T00:49:46.299518" elapsed="0.010116">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:46.299282" elapsed="0.010420">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:46.299140" elapsed="0.010616">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.298731" elapsed="0.011128">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.310093" elapsed="0.000036"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.271602" elapsed="0.038619">No leader found.</status>
</kw>
<msg time="2026-04-10T00:49:46.310346" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.808562" elapsed="90.501894">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.806337" elapsed="90.504232">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:48:15.794659" elapsed="90.516054">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-s1-t29" name="Check Entity Owner Status After Recover" line="143">
<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-10T00:49:46.313917" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.313642" 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-10T00:49:46.315262" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.315130" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.315112" elapsed="0.000221"/>
</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-10T00:49:46.319976" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.319866" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.319834" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.321039" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.320633" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.321504" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.321222" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.321576" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:46.321728" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.320263" 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-10T00:49:46.322109" 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-10T00:49:46.322346" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.322205" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.322189" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.321971" elapsed="0.000495"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.321805" 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-10T00:49:46.319494" elapsed="0.003054"/>
</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-10T00:49:46.314823" elapsed="0.007780"/>
</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-10T00:49:46.314345" elapsed="0.008302"/>
</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-10T00:49:46.311474" elapsed="0.011224"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:46.333734" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.330100" elapsed="0.003675">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.333970" elapsed="0.000023"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.310951" elapsed="0.023166">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t30" name="Create Bridge Manually and Verify After Recover" line="150">
<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-10T00:49:46.337425" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.337163" 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-10T00:49:46.338766" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.338656" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.338637" 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-10T00:49:46.343406" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.343298" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.343280" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.344505" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.344107" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.345007" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.344693" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.345080" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:46.345237" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.343695" 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-10T00:49:46.345604" 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-10T00:49:46.345890" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.345703" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.345685" elapsed="0.000289"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.345463" elapsed="0.000535"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.345314" elapsed="0.000707"/>
</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-10T00:49:46.342933" 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-10T00:49:46.338327" elapsed="0.007806"/>
</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-10T00:49:46.337838" elapsed="0.008340"/>
</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-10T00:49:46.334988" elapsed="0.011245"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.354080" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.353775" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.353756" elapsed="0.000406"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.354506" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:46.354618" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.354311" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.355193" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.354797" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.355763" level="INFO">${conn_id} = 57</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.355395" elapsed="0.000394"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.356832" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.356933" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.356563" elapsed="0.000395"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.357115" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.358295" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:46.358632" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.357973" elapsed="0.001172">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.359202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.357602" elapsed="0.001650"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.356018" elapsed="0.003337">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.359528" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.359869" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.360047" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.360172" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.360132" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.360114" elapsed="0.000122"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.360324" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.360288" elapsed="0.000074"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.360273" elapsed="0.000111"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.360415" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.362974" elapsed="0.000313"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.363448" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.363740" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:46.360726" elapsed="0.003183"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.353252" elapsed="0.010732">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.364043" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.352661" elapsed="0.011428"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.352155" elapsed="0.012032">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.364374" elapsed="0.000028"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.364572" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.364765" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.364986" elapsed="0.000021"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.350077" elapsed="0.015026">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.334307" elapsed="0.030922">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t31" name="Add Port Manually and Verify After Recover" line="154">
<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-10T00:49:46.368381" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.368125" elapsed="0.000518"/>
</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-10T00:49:46.369619" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.369509" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.369491" 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-10T00:49:46.375910" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.375781" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.375762" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.376996" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.376573" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.377472" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.377182" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.377545" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:46.377700" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.376201" elapsed="0.001525"/>
</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-10T00:49:46.378085" elapsed="0.000029"/>
</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-10T00:49:46.378332" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.378190" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.378173" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.377944" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.377779" elapsed="0.000695"/>
</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-10T00:49:46.375413" elapsed="0.003114"/>
</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-10T00:49:46.369225" elapsed="0.009358"/>
</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-10T00:49:46.368788" elapsed="0.009840"/>
</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-10T00:49:46.366105" elapsed="0.012576"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.386503" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.386192" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.386173" elapsed="0.000413"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.386877" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:46.386980" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.386731" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.387529" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.387153" elapsed="0.000422"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.388100" level="INFO">${conn_id} = 59</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.387728" elapsed="0.000398"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.388999" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.389074" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.388720" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.389252" elapsed="0.000312"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.390426" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:46.390657" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.390092" elapsed="0.001007">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.391188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.389727" elapsed="0.001512"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.388334" elapsed="0.003008">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.391510" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.391680" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.391870" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.392151" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.391957" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.391939" elapsed="0.000279"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.392309" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.392271" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.392256" elapsed="0.000114"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.392400" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.395011" elapsed="0.000375"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.395551" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.395862" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:46.392709" elapsed="0.003310"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.385654" elapsed="0.010440">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.396151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.385102" elapsed="0.011096"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.384581" elapsed="0.011716">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.396485" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.396679" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.396889" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.397094" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.382547" elapsed="0.014666">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.365521" elapsed="0.031823">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t32" name="Create Tap Device After Recover" line="158">
<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-10T00:49:46.400471" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.400209" 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-10T00:49:46.401732" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.401618" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.401598" 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-10T00:49:46.406639" elapsed="0.000101"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.406293" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.406274" elapsed="0.000713"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.409942" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.408920" elapsed="0.001091"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.411123" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.410379" elapsed="0.000805"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.411289" elapsed="0.000076"/>
</return>
<msg time="2026-04-10T00:49:46.411657" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.407883" elapsed="0.003832"/>
</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-10T00:49:46.412561" elapsed="0.000050"/>
</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-10T00:49:46.413164" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.412788" elapsed="0.000544"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.412747" elapsed="0.000663"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.412242" elapsed="0.001245"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.411877" elapsed="0.001691"/>
</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-10T00:49:46.405932" elapsed="0.007807"/>
</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-10T00:49:46.401328" elapsed="0.012635"/>
</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-10T00:49:46.400903" elapsed="0.013213"/>
</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-10T00:49:46.398179" elapsed="0.016127"/>
</kw>
<kw name="Create Sample Tap Device" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.419726" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.419427" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.419408" elapsed="0.000400"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.420171" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:46.420279" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.419978" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.420865" level="INFO">Attempting to execute command "ip tuntap add mode tap vport1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.420461" elapsed="0.000453"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.421456" level="INFO">${conn_id} = 61</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.421076" elapsed="0.000406"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.422435" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.422514" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.422117" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.422695" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.423889" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:46.424216" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.423554" elapsed="0.001175">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.424786" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.423201" elapsed="0.001639"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.421701" elapsed="0.003271">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.425192" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.425376" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.425556" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.425680" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.425640" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.425622" elapsed="0.000123"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.425834" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.425797" elapsed="0.000092"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.425782" elapsed="0.000129"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.425942" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.428669" elapsed="0.000326"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.429160" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.429455" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:46.426261" elapsed="0.003350"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.418894" elapsed="0.010792">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.429741" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.417000" elapsed="0.012787"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.415742" elapsed="0.014159">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ip tuntap add mode tap vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.430108" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport1 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.430318" elapsed="0.000022"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${ovs_system_ip}</arg>
<arg>ifconfig vport2 up</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.430551" elapsed="0.000023"/>
</kw>
<doc>Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.414919" elapsed="0.015743">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create tap devices to add to the bridge in ovs</doc>
<status status="FAIL" start="2026-04-10T00:49:46.397656" elapsed="0.033150">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t33" name="Add Tap Device Manually and Verify After Recover" line="162">
<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-10T00:49:46.434348" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.434088" elapsed="0.000543"/>
</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-10T00:49:46.435624" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.435512" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.435493" 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-10T00:49:46.440361" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.440252" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.440233" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.441433" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.441051" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.441931" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.441619" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.442003" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:46.442155" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.440655" elapsed="0.001563"/>
</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-10T00:49:46.442605" 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-10T00:49:46.442863" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.442703" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.442686" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.442462" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.442275" elapsed="0.000717"/>
</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-10T00:49:46.439889" elapsed="0.003160"/>
</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-10T00:49:46.435226" elapsed="0.007877"/>
</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-10T00:49:46.434779" elapsed="0.008368"/>
</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-10T00:49:46.431895" elapsed="0.011303"/>
</kw>
<kw name="Add Sample Tap Device To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.451192" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.450920" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.450901" elapsed="0.000381"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.451560" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:46.451661" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.451430" elapsed="0.000257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.452234" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.451838" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.452795" level="INFO">${conn_id} = 63</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.452437" elapsed="0.000384"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.453895" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.453975" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.453603" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.454158" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.455366" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:46.455588" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.455051" elapsed="0.000978">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.456086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.454675" elapsed="0.001460"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.453049" elapsed="0.003188">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.456410" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.456580" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.456757" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.456937" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.456840" elapsed="0.000144"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.456822" elapsed="0.000185"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.457095" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.457059" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.457043" elapsed="0.000112"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.457185" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.459786" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.460282" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.460574" elapsed="0.000096"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:46.457495" elapsed="0.003227"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.450364" elapsed="0.010433">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.460868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.449799" elapsed="0.011118"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.449300" elapsed="0.011716">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vport1=2</arg>
<arg>vport2=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.461208" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vport1=0</arg>
<arg>vport2=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.461403" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.461601" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.461801" elapsed="0.000020"/>
</kw>
<doc>Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.447221" elapsed="0.014713">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add tap devices to the bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.431218" elapsed="0.030846">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t34" name="Delete the Bridge Manually and Verify After Recover" 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-10T00:49:46.465292" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.465032" elapsed="0.000522"/>
</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-10T00:49:46.466594" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.466462" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.466442" 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-10T00:49:46.471417" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.471309" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.471291" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.472478" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.472097" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.472965" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.472663" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.473036" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:46.473188" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.471704" elapsed="0.001509"/>
</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-10T00:49:46.473595" 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-10T00:49:46.473838" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.473693" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.473676" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.473455" elapsed="0.000500"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.473303" elapsed="0.000676"/>
</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-10T00:49:46.470946" 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-10T00:49:46.466138" elapsed="0.007949"/>
</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-10T00:49:46.465703" elapsed="0.008430"/>
</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-10T00:49:46.462987" elapsed="0.011197"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.482242" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.481972" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.481952" elapsed="0.000370"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.482621" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:46.482723" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.482489" elapsed="0.000260"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.483370" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:46.482923" elapsed="0.000495"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.484161" level="INFO">${conn_id} = 65</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.483761" elapsed="0.000426"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.485071" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:46.485185" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:46.484790" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.485377" elapsed="0.000332"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:46.486587" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:46.486858" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.486249" elapsed="0.001053">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.487360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.485891" elapsed="0.001518"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.484401" elapsed="0.003110">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.487683" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.487869" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.488206" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.488334" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.488294" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.488276" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.488518" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.488447" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.488432" elapsed="0.000151"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.488613" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:46.491280" elapsed="0.000312"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.491756" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:46.492069" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:46.488976" elapsed="0.003246"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.481348" elapsed="0.010950">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:46.492354" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.480659" elapsed="0.011742"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.480164" elapsed="0.012335">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.492684" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:46.492933" elapsed="0.000024"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.478088" elapsed="0.014971">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.462348" elapsed="0.030841">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s1-t35" name="Verify Modified Port After Recover" 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-10T00:49:46.496453" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:46.496147" elapsed="0.000570"/>
</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-10T00:49:46.497693" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.497582" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.497563" 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-10T00:49:46.502312" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:46.502203" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:46.502185" elapsed="0.000229"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.503407" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:46.503027" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.503897" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:46.503592" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:46.503969" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:46.504120" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:46.502634" 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-10T00:49:46.504481" 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-10T00:49:46.504717" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:46.504576" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:46.504559" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:46.504344" elapsed="0.000470"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:46.504197" 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-10T00:49:46.501833" 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-10T00:49:46.497296" elapsed="0.007708"/>
</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-10T00:49:46.496880" elapsed="0.008174"/>
</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-10T00:49:46.494065" elapsed="0.011057"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:49:46.511579" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:49:46.511224" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:46.523664" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.519928" elapsed="0.003775">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:47.542051" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:47.538225" elapsed="0.003878">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:48.560508" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:48.556676" elapsed="0.003886">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:49.577952" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:49.574146" elapsed="0.003859">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:50.596326" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:50.592516" elapsed="0.003862">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:51.616679" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.611385" elapsed="0.005361">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:49:51.616915" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:49:46.511795" elapsed="5.105316">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.509204" elapsed="5.108081">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:46.493490" elapsed="5.124000">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t36" name="Delete Port In New Owner After Recover" line="174">
<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-10T00:49:51.621666" elapsed="0.000281"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.621391" elapsed="0.000613"/>
</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-10T00:49:51.623130" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.622994" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.622970" elapsed="0.000234"/>
</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-10T00:49:51.627788" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.627680" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.627662" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.628890" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.628483" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.629365" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.629078" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.629436" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:51.629593" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.628110" elapsed="0.001508"/>
</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-10T00:49:51.629986" 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-10T00:49:51.630227" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.630084" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.630067" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.629829" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.629674" elapsed="0.000676"/>
</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-10T00:49:51.627324" 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-10T00:49:51.622608" elapsed="0.007848"/>
</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-10T00:49:51.622157" elapsed="0.008343"/>
</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-10T00:49:51.618691" elapsed="0.011860"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:51.641790" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.638245" elapsed="0.003586">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.617790" elapsed="0.024195">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t37" name="Delete Bridge In New Owner And Verify After Recover" line="178">
<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-10T00:49:51.645281" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.645020" 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-10T00:49:51.646512" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.646403" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.646385" 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-10T00:49:51.651086" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.650979" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.650962" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.652154" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.651733" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.652624" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.652339" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.652695" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:51.652864" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.651368" elapsed="0.001522"/>
</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-10T00:49:51.653272" 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-10T00:49:51.653512" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.653369" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.653352" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.653132" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.652980" elapsed="0.000655"/>
</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-10T00:49:51.650612" elapsed="0.003075"/>
</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-10T00:49:51.646123" elapsed="0.007619"/>
</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-10T00:49:51.645692" elapsed="0.008093"/>
</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-10T00:49:51.642703" elapsed="0.011132"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:51.664907" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.661415" elapsed="0.003530">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.642174" elapsed="0.022905">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t38" name="Create Bridge In Old Owner and Verify After Recover" line="182">
<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-10T00:49:51.668711" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.668414" 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-10T00:49:51.669964" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.669836" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.669818" 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-10T00:49:51.674576" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.674468" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.674450" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.675643" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.675258" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.676182" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.675829" elapsed="0.000380"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.676255" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:51.676409" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.674879" 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-10T00:49:51.676775" 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-10T00:49:51.677036" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.676890" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.676871" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.676635" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.676486" 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-10T00:49:51.674112" elapsed="0.003100"/>
</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-10T00:49:51.669556" elapsed="0.007709"/>
</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-10T00:49:51.669144" elapsed="0.008165"/>
</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-10T00:49:51.666079" elapsed="0.011280"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:51.688912" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.685210" elapsed="0.003741">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.665448" elapsed="0.023637">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t39" name="Create Port In Old Owner and Verify After Recover" line="186">
<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-10T00:49:51.692364" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.692102" 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-10T00:49:51.693604" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.693493" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.693474" 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-10T00:49:51.698227" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.698120" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.698102" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.699280" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.698894" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.699750" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.699463" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.699820" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:49:51.700021" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.698513" 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-10T00:49:51.700391" 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-10T00:49:51.700683" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.700523" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.700495" elapsed="0.000269"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.700249" elapsed="0.000538"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.700100" 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-10T00:49:51.697753" elapsed="0.003127"/>
</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-10T00:49:51.693210" elapsed="0.007726"/>
</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-10T00:49:51.692776" elapsed="0.008204"/>
</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-10T00:49:51.689938" elapsed="0.011094"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:51.712352" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.708660" elapsed="0.003731">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.689361" elapsed="0.023160">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t40" name="Modify the destination IP of Port In Old Owner After Recover" line="190">
<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-10T00:49:51.717624" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.717360" 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-10T00:49:51.718905" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.718775" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.718756" 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-10T00:49:51.723501" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.723394" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.723375" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.724606" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.724225" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.725096" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.724792" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.725168" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:51.725322" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.723827" elapsed="0.001520"/>
</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-10T00:49:51.725689" 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-10T00:49:51.725944" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.725786" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.725769" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.725549" elapsed="0.000497"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.725399" elapsed="0.000672"/>
</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-10T00:49:51.723038" elapsed="0.003085"/>
</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-10T00:49:51.718488" elapsed="0.007689"/>
</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-10T00:49:51.718066" elapsed="0.008154"/>
</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-10T00:49:51.713366" elapsed="0.012905"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:51.734105" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.730361" elapsed="0.003784">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.712795" elapsed="0.021485">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t41" name="Verify Port Is Modified After Recover" 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-10T00:49:51.737406" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:51.737128" 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-10T00:49:51.738636" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.738527" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.738508" 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-10T00:49:51.744542" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:51.744390" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:51.744364" elapsed="0.000273"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.746038" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:51.745483" elapsed="0.000595"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.746701" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:51.746300" elapsed="0.000437"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:51.746800" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:49:51.747042" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:51.744967" elapsed="0.002110"/>
</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-10T00:49:51.747545" elapsed="0.000029"/>
</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-10T00:49:51.747895" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:51.747677" elapsed="0.000310"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:51.747653" elapsed="0.000411"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:51.747351" elapsed="0.000751"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:51.747148" elapsed="0.000987"/>
</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-10T00:49:51.743868" elapsed="0.004340"/>
</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-10T00:49:51.738245" elapsed="0.010038"/>
</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-10T00:49:51.737815" elapsed="0.010529"/>
</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-10T00:49:51.735090" elapsed="0.013322"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:49:51.756045" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:49:51.755668" elapsed="0.000404"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:51.768145" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.764407" elapsed="0.003777">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:52.786678" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:52.782824" elapsed="0.003909">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:53.810914" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:53.805628" elapsed="0.005362">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:54.823819" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:54.819952" elapsed="0.003931">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:55.843601" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:55.838092" elapsed="0.005575">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:56.862207" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.858255" elapsed="0.004008">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:49:56.862380" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:49:51.756259" elapsed="5.106269">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.753711" elapsed="5.108953">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:51.734559" elapsed="5.128269">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s1-t42" name="Delete Port In Old Owner After Recover" line="198">
<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-10T00:49:56.866221" elapsed="0.000265"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:56.865946" 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-10T00:49:56.867673" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.867536" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.867512" elapsed="0.000234"/>
</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-10T00:49:56.872877" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.872706" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.872680" elapsed="0.000293"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.874328" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:56.873889" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.874803" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:56.874516" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:56.874890" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:49:56.875049" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:56.873290" elapsed="0.001784"/>
</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-10T00:49:56.875430" 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-10T00:49:56.875669" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:56.875527" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:56.875510" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:56.875288" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.875131" elapsed="0.000661"/>
</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-10T00:49:56.872201" elapsed="0.003657"/>
</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-10T00:49:56.867234" elapsed="0.008681"/>
</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-10T00:49:56.866762" elapsed="0.009198"/>
</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-10T00:49:56.863823" elapsed="0.012188"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:56.887946" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.884168" elapsed="0.003819">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.863233" elapsed="0.024890">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t43" name="Delete Bridge In Old Owner And Verify After Recover" line="202">
<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-10T00:49:56.891323" elapsed="0.000238"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:56.891063" elapsed="0.000555"/>
</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-10T00:49:56.892610" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.892497" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.892477" 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-10T00:49:56.897212" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.897106" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.897087" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.898320" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:56.897929" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.898794" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:56.898507" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:56.898881" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:49:56.899049" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:56.897496" elapsed="0.001581"/>
</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-10T00:49:56.899465" 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-10T00:49:56.899703" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:56.899561" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:56.899544" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:56.899324" elapsed="0.000477"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.899172" elapsed="0.000653"/>
</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-10T00:49:56.896738" elapsed="0.003156"/>
</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-10T00:49:56.892211" elapsed="0.007738"/>
</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-10T00:49:56.891767" elapsed="0.008226"/>
</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-10T00:49:56.889006" elapsed="0.011037"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:56.911795" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.907747" elapsed="0.004090">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.888407" elapsed="0.023584">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s1-t44" name="Cleans Up Test Environment For Next Suite" line="206">
<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-10T00:49:56.915444" elapsed="0.000220"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:56.915162" 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-10T00:49:56.916706" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.916595" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.916577" 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-10T00:49:56.921397" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.921287" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.921269" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.922506" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:56.922125" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.922995" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:56.922691" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:56.923067" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:49:56.923223" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:56.921730" elapsed="0.001517"/>
</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-10T00:49:56.923585" 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-10T00:49:56.923825" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:56.923683" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:56.923666" elapsed="0.000250"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:56.923447" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.923299" 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-10T00:49:56.920923" elapsed="0.003093"/>
</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-10T00:49:56.916310" elapsed="0.007760"/>
</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-10T00:49:56.915884" elapsed="0.008230"/>
</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-10T00:49:56.912910" elapsed="0.011255"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.929075" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:56.928775" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:56.928756" elapsed="0.000402"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:56.929649" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:56.929757" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:56.929308" elapsed="0.000477"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.930350" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:56.929958" elapsed="0.000440"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:56.930945" level="INFO">${conn_id} = 67</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:56.930558" elapsed="0.000415"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:56.931890" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:56.931970" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:56.931586" elapsed="0.000409"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:56.932158" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:56.933347" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:56.933652" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.933027" elapsed="0.001114">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:56.934199" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.932650" elapsed="0.001600"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.931191" elapsed="0.003167">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.934532" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.934709" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.934908" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.935037" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.934996" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:56.934977" elapsed="0.000125"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.935191" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:56.935155" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:56.935139" elapsed="0.000114"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:56.935284" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:56.937896" elapsed="0.000311"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:56.938370" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:56.938663" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:56.935601" elapsed="0.003215"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.928254" elapsed="0.010655">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:56.939000" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.927684" elapsed="0.011367"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.927204" elapsed="0.011948">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.939333" elapsed="0.000024"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:49:56.926837" elapsed="0.012608">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.939637" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.939859" elapsed="0.000024"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.940070" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.940276" elapsed="0.000023"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.926453" elapsed="0.013934">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.940600" elapsed="0.000033"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:56.940838" elapsed="0.000038"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.924415" elapsed="0.016919">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="FAIL" start="2026-04-10T00:49:56.912271" elapsed="0.029201">OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-10T00:49:56.942226" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-10T00:49:56.942142" elapsed="0.000136"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Owner failover and recover</doc>
<status status="FAIL" start="2026-04-10T00:48:09.912138" elapsed="107.030173"/>
</suite>
<suite id="s1-s2-s2" name="Southbound Cluster Extension" source="/w/workspace/ovsdb-csit-3node-upstream-clustering-only-vanadium/test/csit/suites/ovsdb/Southbound_Cluster/020__Southbound_Cluster_Extension.robot">
<kw name="Suite Setup" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.023179" 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-10T00:49:57.019246" elapsed="0.003985"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-10T00:49:57.019023" elapsed="0.004276"/>
</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-10T00:49:57.027945" 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-10T00:49:57.024387" elapsed="0.003588"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-10T00:49:57.028181" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.028062" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.028038" elapsed="0.000214"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.028777" 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-10T00:49:57.028409" elapsed="0.000412"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.029311" 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-10T00:49:57.028999" elapsed="0.000339"/>
</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-10T00:49:57.029870" elapsed="0.000314"/>
</kw>
<msg time="2026-04-10T00:49:57.030289" level="INFO">${status} = PASS</msg>
<msg time="2026-04-10T00:49:57.030338" 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-10T00:49:57.029518" elapsed="0.000844"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.030930" 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-10T00:49:57.030532" elapsed="0.000427"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.031954" 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-10T00:49:57.031662" elapsed="0.000319"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.032457" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.032196" elapsed="0.000288"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.032953" 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-10T00:49:57.032640" elapsed="0.000340"/>
</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-10T00:49:57.035379" elapsed="0.000028"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.035175" elapsed="0.000283"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.033039" elapsed="0.002452"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.036101" 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-10T00:49:57.035661" elapsed="0.000487"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.036725" 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-10T00:49:57.036319" elapsed="0.000458"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.037401" 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-10T00:49:57.036974" elapsed="0.000501"/>
</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-10T00:49:57.031211" elapsed="0.006327"/>
</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-10T00:49:57.024045" elapsed="0.013552"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.037778" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.037663" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.037644" elapsed="0.000217"/>
</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-10T00:49:57.041024" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.040604" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.041556" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.041218" elapsed="0.000366"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.041633" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:49:57.041799" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.040276" elapsed="0.001548"/>
</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-10T00:49:57.042182" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.042007" elapsed="0.000235"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.041894" elapsed="0.000374"/>
</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-10T00:49:57.038085" elapsed="0.004235"/>
</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-10T00:49:57.042473" 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-10T00:49:57.043009" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.042872" elapsed="0.000202"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.042738" elapsed="0.000362"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-10T00:49:57.023590" elapsed="0.019574"/>
</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-10T00:49:57.045702" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.045590" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.045571" 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-10T00:49:57.050255" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.050146" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.050128" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.051325" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.050937" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.051821" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.051515" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.051913" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:57.052073" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.050590" elapsed="0.001508"/>
</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-10T00:49:57.052448" 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-10T00:49:57.052696" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.052548" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.052531" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.052305" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.052151" elapsed="0.000672"/>
</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-10T00:49:57.049839" elapsed="0.003054"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-10T00:49:57.043752" elapsed="0.009199"/>
</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-10T00:49:57.043335" elapsed="0.009657"/>
</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-10T00:49:57.018686" elapsed="0.034356"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.053965" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-10T00:49:57.053619" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-10T00:49:57.054165" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-10T00:49:57.054066" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.054048" elapsed="0.000196"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.054398" elapsed="0.000022"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.054572" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.054752" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.054955" elapsed="0.000024"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.055207" elapsed="0.000025"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-10T00:49:57.053303" elapsed="0.001993"/>
</kw>
<status status="PASS" start="2026-04-10T00:49:57.018378" elapsed="0.036967"/>
</kw>
<test id="s1-s2-s2-t1" name="Check Shards Status Before Fail" line="17">
<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-10T00:49:57.058505" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.058239" 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-10T00:49:57.059774" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.059663" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.059644" 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-10T00:49:57.064459" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.064348" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.064329" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.065552" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.065150" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.066098" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.065782" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.066173" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:57.066330" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.064751" elapsed="0.001604"/>
</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-10T00:49:57.066698" 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-10T00:49:57.066955" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.066795" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.066778" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.066557" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.066408" 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-10T00:49:57.063962" elapsed="0.003175"/>
</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-10T00:49:57.059374" elapsed="0.007819"/>
</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-10T00:49:57.058944" elapsed="0.008295"/>
</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-10T00:49:57.055909" elapsed="0.011382"/>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.089590" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:49:57.089896" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.088916" 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 [['topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:57.088442" elapsed="0.001586"/>
</kw>
<msg time="2026-04-10T00:49:57.090097" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.078293" elapsed="0.011865"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:49:57.077730" elapsed="0.012532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.090899" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:57.090517" 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-10T00:49:57.098224" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.097663" elapsed="0.000600"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.098910" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.098483" elapsed="0.000465"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.099014" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:49:57.099233" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.097125" elapsed="0.002142"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:49:57.099479" elapsed="0.000219"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.100414" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.099941" elapsed="0.000510"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.101146" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.100735" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.101901" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.101395" elapsed="0.000546"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.102378" 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-10T00:49:57.102627" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.102483" 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-10T00:49:57.102863" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.102708" 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-10T00:49:57.103085" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.102943" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.102465" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.102209" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.102012" elapsed="0.001198"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:49:57.103249" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:57.103452" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:49:57.103499" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:49:57.096113" elapsed="0.007410"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.103990" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:57.104067" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:57.103695" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.104657" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.104377" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:49:57.104161" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:49:57.104143" 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-10T00:49:57.104996" 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-10T00:49:57.105167" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.105233" 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-10T00:49:57.092577" elapsed="0.012762">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:49:57.092009" elapsed="0.013421">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:49:57.091807" elapsed="0.013688">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.091274" elapsed="0.014312">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.105813" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.067505" elapsed="0.038438">No leader found.</status>
</kw>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.055396" elapsed="0.050688">No leader found.</status>
</test>
<test id="s1-s2-s2-t2" name="Start OVS Multiple Connections" line="21">
<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-10T00:49:57.110536" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.110273" elapsed="0.000532"/>
</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-10T00:49:57.111788" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.111676" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.111657" 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-10T00:49:57.116478" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.116369" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.116351" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.117544" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.117151" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.118033" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.117729" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.118105" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:57.118259" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.116764" elapsed="0.001520"/>
</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-10T00:49:57.118621" 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-10T00:49:57.118875" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.118718" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.118701" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.118483" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.118336" 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-10T00:49:57.116010" elapsed="0.003042"/>
</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-10T00:49:57.111390" elapsed="0.007717"/>
</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-10T00:49:57.110971" elapsed="0.008180"/>
</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-10T00:49:57.106882" elapsed="0.012321"/>
</kw>
<kw name="Add Multiple Managers to OVS" owner="OVSDB">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.126073" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.125672" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.126553" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.126262" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.126626" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:57.126781" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${controller_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.125270" elapsed="0.001536"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.129446" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.129147" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.128960" elapsed="0.000570"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.129835" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:57.129955" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.129678" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.130519" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:57.130134" elapsed="0.000431"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.131108" level="INFO">${conn_id} = 69</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.130723" elapsed="0.000446"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.132073" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:57.132151" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:57.131784" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.132335" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.133937" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:57.134219" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.133581" elapsed="0.001097">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.134735" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.132818" elapsed="0.001966"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.131387" elapsed="0.003522">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.135084" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.135257" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.135433" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.135558" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.135517" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.135500" elapsed="0.000122"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.135708" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.135672" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.135658" elapsed="0.000110"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.135799" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.138418" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.138904" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.139199" elapsed="0.000101"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:57.136122" elapsed="0.003229"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.128442" elapsed="0.010985">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.139482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.127892" elapsed="0.011636"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.127392" elapsed="0.012232">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.139802" elapsed="0.000024"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:49:57.127043" elapsed="0.012887">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${ovs_opt}</var>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.140086" elapsed="0.000022"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<var>${ovs_opt}</var>
<arg>${ovs_opt}</arg>
<arg>${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ovs_mgr_port}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.140341" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${ovs_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.140511" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.140214" elapsed="0.000347"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.140155" elapsed="0.000430"/>
</for>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl set-manager ${ovs_opt}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.140769" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${output}</var>
<arg>5s</arg>
<arg>1s</arg>
<arg>Verify OVS Reports Connected</arg>
<arg>${tools_system}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.141010" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.141191" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${controller_index}</var>
<arg>${index_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.141354" elapsed="0.000020"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${controller_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.141596" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${ovsdb_uuid}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>OVSDB.Get OVSDB UUID</arg>
<arg>controller_http_session=${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.141775" elapsed="0.000020"/>
</kw>
<return>
<value>${ovsdb_uuid}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.141860" elapsed="0.000018"/>
</return>
<var>${ovsdb_uuid}</var>
<doc>Connect OVS to the list of controllers in the ${controller_index_list} or all if no list is provided.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.123172" elapsed="0.018790">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ovsdb_uuid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.142126" elapsed="0.000021"/>
</kw>
<doc>Connect OVS to all cluster instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.106383" elapsed="0.035893">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t3" name="Check Entity Owner Status And Find Owner and Candidate Before Fail" line="26">
<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-10T00:49:57.145784" elapsed="0.000231"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.145521" 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-10T00:49:57.147063" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.146946" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.146927" 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-10T00:49:57.151711" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.151601" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.151582" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.152784" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.152401" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.153293" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.152989" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.153366" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:49:57.153541" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.152018" elapsed="0.001549"/>
</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-10T00:49:57.153925" 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-10T00:49:57.154174" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.154023" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.154007" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.153769" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.153620" 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-10T00:49:57.151236" 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-10T00:49:57.146644" elapsed="0.007762"/>
</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-10T00:49:57.146219" elapsed="0.008233"/>
</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-10T00:49:57.143196" elapsed="0.011307"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:57.165909" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${original_owner}</var>
<var>${original_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.161903" elapsed="0.004048">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${original_candidate}</var>
<arg>${original_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.166168" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.166362" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${original_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.166537" elapsed="0.000021"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.142585" elapsed="0.024098">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t4" name="Create Bridge Manually and Verify Before Fail" line="35">
<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-10T00:49:57.170123" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.169834" 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-10T00:49:57.171391" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.171274" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.171256" 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-10T00:49:57.176080" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.175972" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.175954" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.177162" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.176755" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.177679" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.177349" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.177752" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:57.177927" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.176369" elapsed="0.001584"/>
</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-10T00:49:57.178296" 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-10T00:49:57.178546" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.178394" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.178376" elapsed="0.000249"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.178155" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.178006" 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-10T00:49:57.175595" elapsed="0.003128"/>
</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-10T00:49:57.170989" elapsed="0.007790"/>
</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-10T00:49:57.170552" elapsed="0.008272"/>
</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-10T00:49:57.167583" elapsed="0.011311"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.186767" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.186490" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.186471" elapsed="0.000395"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.187154" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:57.187257" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.187018" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.187824" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:57.187433" elapsed="0.000455"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.188456" level="INFO">${conn_id} = 71</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.188089" elapsed="0.000393"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.189584" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:57.189671" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:57.189279" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.189874" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.191084" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:57.191321" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.190742" elapsed="0.001034">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.191836" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.190368" elapsed="0.001537"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.188710" elapsed="0.003300">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.192183" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.192354" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.192530" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.192655" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.192615" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.192597" elapsed="0.000129"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.192815" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.192780" elapsed="0.000091"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.192764" elapsed="0.000129"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.192924" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.195491" elapsed="0.000323"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.195997" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.196294" elapsed="0.000100"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:57.193235" elapsed="0.003211"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.185967" elapsed="0.010554">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.196576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.185359" elapsed="0.011262"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.184868" elapsed="0.011851">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.197112" elapsed="0.000026"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.197313" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.197534" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.197735" elapsed="0.000022"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.182788" elapsed="0.015128">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.166986" elapsed="0.031069">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t5" name="Add Port Manually and Verify Before Fail" line="39">
<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-10T00:49:57.201236" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.200966" elapsed="0.000556"/>
</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-10T00:49:57.202518" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.202405" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.202386" 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-10T00:49:57.207332" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.207223" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.207205" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.208420" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.208034" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.208914" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.208605" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.208998" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:57.209169" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.207622" 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-10T00:49:57.209575" 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-10T00:49:57.209813" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.209672" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.209656" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.209432" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.209250" 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-10T00:49:57.206852" elapsed="0.003167"/>
</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-10T00:49:57.202116" elapsed="0.007965"/>
</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-10T00:49:57.201670" elapsed="0.008455"/>
</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-10T00:49:57.198943" elapsed="0.011233"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.218013" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.217729" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.217711" elapsed="0.000394"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.218390" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:57.218493" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.218259" elapsed="0.000261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.219067" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:57.218669" elapsed="0.000452"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.219636" level="INFO">${conn_id} = 73</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.219278" elapsed="0.000384"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.220615" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:57.220693" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:57.220342" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.220891" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.222124" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:57.222353" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.221787" elapsed="0.000992">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.222836" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.221428" elapsed="0.001476"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.219937" elapsed="0.003070">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.223186" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.223361" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.223536" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.223909" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.223822" elapsed="0.000135"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.223640" elapsed="0.000340"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.224074" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.224036" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.224019" elapsed="0.000119"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.224177" elapsed="0.000027"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.226788" elapsed="0.000331"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.227292" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.227590" elapsed="0.000097"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:57.224523" elapsed="0.003218"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.217184" elapsed="0.010632">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.227891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.216612" elapsed="0.011327"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.216112" elapsed="0.011924">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.228222" elapsed="0.000026"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.228423" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.228612" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.228810" elapsed="0.000019"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.214043" elapsed="0.015232">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.198344" elapsed="0.031098">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t6" name="Delete the Bridge Manually and Verify Before Fail" line="43">
<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-10T00:49:57.232897" elapsed="0.000232"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.232520" elapsed="0.000665"/>
</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-10T00:49:57.234493" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.234381" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.234362" 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-10T00:49:57.239148" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.239031" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.239013" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.240224" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.239818" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.240699" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.240409" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.240770" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:49:57.240942" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.239444" 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-10T00:49:57.241315" 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-10T00:49:57.241568" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.241423" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.241406" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.241176" elapsed="0.000491"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.241022" 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-10T00:49:57.238650" elapsed="0.003098"/>
</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-10T00:49:57.234081" elapsed="0.007722"/>
</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-10T00:49:57.233334" elapsed="0.008530"/>
</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-10T00:49:57.230441" elapsed="0.011489"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.249944" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.249658" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.249639" elapsed="0.000387"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.250313" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:49:57.250414" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.250170" elapsed="0.000271"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.250984" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:49:57.250588" elapsed="0.000442"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.251549" level="INFO">${conn_id} = 75</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.251189" elapsed="0.000386"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.252465" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:49:57.252543" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:49:57.252190" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.252789" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:49:57.253988" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:49:57.254257" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.253656" elapsed="0.001092">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.254805" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.253291" elapsed="0.001579"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.251784" elapsed="0.003191">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.255145" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.255315" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.255492" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.255614" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.255575" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.255558" elapsed="0.000119"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.255762" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.255727" elapsed="0.000073"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.255713" elapsed="0.000108"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.255865" elapsed="0.000015"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:49:57.258616" elapsed="0.000325"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.259102" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:49:57.259396" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:49:57.256207" elapsed="0.003339"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.249098" elapsed="0.010522">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:49:57.259675" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.248529" elapsed="0.011192"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.248037" elapsed="0.011781">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.260019" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:49:57.260213" elapsed="0.000021"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.246012" elapsed="0.014316">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.229791" elapsed="0.030670">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t7" name="Create Bridge In Owner and Verify Before Fail" 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-10T00:49:57.263968" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.263686" 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-10T00:49:57.265215" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.265103" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.265084" 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-10T00:49:57.269947" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.269824" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.269806" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.270998" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.270604" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.271472" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.271185" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.271544" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:57.271696" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.270233" elapsed="0.001488"/>
</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-10T00:49:57.272079" 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-10T00:49:57.272315" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.272175" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.272158" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.271940" elapsed="0.000472"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.271774" elapsed="0.000662"/>
</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-10T00:49:57.269469" elapsed="0.003018"/>
</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-10T00:49:57.264801" elapsed="0.007740"/>
</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-10T00:49:57.264383" elapsed="0.008202"/>
</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-10T00:49:57.261645" elapsed="0.010991"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:57.284360" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.280517" elapsed="0.003890">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.260787" elapsed="0.023763">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t8" name="Create Port In Owner and Verify Before Fail" 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-10T00:49:57.287673" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.287417" elapsed="0.000534"/>
</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-10T00:49:57.288943" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.288817" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.288799" 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-10T00:49:57.293816" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.293710" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.293692" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.294876" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.294485" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.295346" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.295061" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.295416" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:57.295568" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.294116" 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-10T00:49:57.296005" 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-10T00:49:57.296313" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.296144" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.296125" elapsed="0.000285"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.295838" elapsed="0.000596"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.295672" elapsed="0.000791"/>
</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-10T00:49:57.293350" elapsed="0.003179"/>
</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-10T00:49:57.288533" elapsed="0.008065"/>
</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-10T00:49:57.288098" 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-10T00:49:57.285427" elapsed="0.011289"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:57.308231" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.304520" elapsed="0.003749">Variable '${original_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.284832" elapsed="0.023570">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t9" name="Modify the destination IP of Port In Owner Before Fail" 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-10T00:49:57.311496" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.311240" elapsed="0.000519"/>
</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-10T00:49:57.312722" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.312613" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.312596" 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-10T00:49:57.317396" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.317265" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.317248" elapsed="0.000216"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.318449" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.318072" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.318934" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.318632" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.319005" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:49:57.319157" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.317682" elapsed="0.001499"/>
</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-10T00:49:57.319515" 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-10T00:49:57.319753" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.319612" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.319595" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.319378" elapsed="0.000488"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.319232" elapsed="0.000660"/>
</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-10T00:49:57.316893" 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-10T00:49:57.312334" elapsed="0.007665"/>
</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-10T00:49:57.311921" elapsed="0.008121"/>
</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-10T00:49:57.309236" elapsed="0.010857"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:49:57.328226" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.324333" elapsed="0.003970">Variable '${original_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.308681" elapsed="0.019761">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t10" name="Verify Port Is Modified Before Fail" 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-10T00:49:57.331527" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:49:57.331271" elapsed="0.000519"/>
</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-10T00:49:57.332758" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.332649" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.332631" 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-10T00:49:57.337391" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:49:57.337271" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-10T00:49:57.337253" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.338461" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:49:57.338077" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.338953" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:49:57.338646" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:49:57.339026" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:49:57.339180" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:49:57.337674" 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-10T00:49:57.339544" 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-10T00:49:57.339782" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:49:57.339641" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:49:57.339625" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:49:57.339404" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:49:57.339257" 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-10T00:49:57.336916" elapsed="0.003069"/>
</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-10T00:49:57.332367" elapsed="0.007673"/>
</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-10T00:49:57.331951" elapsed="0.008132"/>
</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-10T00:49:57.329245" elapsed="0.010890"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:49:57.348373" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:49:57.348026" elapsed="0.000375"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:57.361238" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.357169" elapsed="0.004108">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:58.381322" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:58.375809" elapsed="0.005570">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:49:59.401268" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:49:59.395975" elapsed="0.005346">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:50:00.418639" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:50:00.413175" elapsed="0.005539">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:50:01.436492" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:50:01.432669" elapsed="0.003876">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:50:02.454835" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.450995" elapsed="0.003905">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:50:02.455055" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:49:57.348589" elapsed="5.106620">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.346022" elapsed="5.109320">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:49:57.328725" elapsed="5.126805">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t11" name="Delete Port In Owner Before Fail" line="63">
<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-10T00:50:02.458885" elapsed="0.000323"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.458581" elapsed="0.000689"/>
</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-10T00:50:02.460384" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.460244" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.460219" elapsed="0.000241"/>
</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-10T00:50:02.465119" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.465007" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.464988" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.466232" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.465800" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.466717" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.466423" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.466789" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:02.467019" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.465420" elapsed="0.001628"/>
</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-10T00:50:02.467419" 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-10T00:50:02.467664" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.467517" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.467499" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.467272" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.467109" elapsed="0.000681"/>
</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-10T00:50:02.464613" elapsed="0.003249"/>
</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-10T00:50:02.459936" 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-10T00:50:02.459431" elapsed="0.008624"/>
</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-10T00:50:02.456549" elapsed="0.011562"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.479625" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.475905" elapsed="0.003761">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.455957" elapsed="0.023849">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t12" name="Delete Bridge In Owner And Verify Before Fail" line="67">
<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-10T00:50:02.483335" elapsed="0.000220"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.483056" 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-10T00:50:02.484662" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.484546" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.484524" 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-10T00:50:02.489419" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.489302" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.489281" elapsed="0.000218"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.490596" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.490167" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.491148" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.490786" elapsed="0.000393"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.491224" elapsed="0.000047"/>
</return>
<msg time="2026-04-10T00:50:02.491450" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.489756" elapsed="0.001721"/>
</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-10T00:50:02.491838" elapsed="0.000045"/>
</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-10T00:50:02.492108" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.491962" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.491945" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.491694" elapsed="0.000516"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.491535" 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-10T00:50:02.488904" elapsed="0.003409"/>
</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-10T00:50:02.484253" elapsed="0.008121"/>
</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-10T00:50:02.483788" elapsed="0.008631"/>
</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-10T00:50:02.480736" elapsed="0.011735"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.504189" level="FAIL">Variable '${original_owner}' not found.</msg>
<arg>${original_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.500355" elapsed="0.003876">Variable '${original_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.480129" elapsed="0.024241">Variable '${original_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t13" name="Kill Candidate Instance" line="71">
<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-10T00:50:02.507598" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.507314" elapsed="0.000600"/>
</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-10T00:50:02.509041" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.508823" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.508802" elapsed="0.000333"/>
</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-10T00:50:02.514139" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.514013" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.513992" elapsed="0.000218"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.515327" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.514923" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.515836" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.515516" elapsed="0.000377"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.515947" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:50:02.516124" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.514456" 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-10T00:50:02.516515" 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-10T00:50:02.516783" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.516617" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.516599" elapsed="0.000314"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.516371" elapsed="0.000569"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.516213" elapsed="0.000753"/>
</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-10T00:50:02.513577" elapsed="0.003446"/>
</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-10T00:50:02.508508" elapsed="0.008574"/>
</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-10T00:50:02.508073" elapsed="0.009055"/>
</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-10T00:50:02.505241" elapsed="0.011940"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:50:02.521413" level="FAIL">Variable '${original_candidate}' not found.</msg>
<var>${new_cluster_list}</var>
<arg>${original_candidate}</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-10T00:50:02.517435" elapsed="0.004021">Variable '${original_candidate}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_cluster_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:02.521638" elapsed="0.000022"/>
</kw>
<doc>Kill Owner Instance and verify it is dead</doc>
<status status="FAIL" start="2026-04-10T00:50:02.504722" elapsed="0.017086">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t14" name="Check Shards Status After Fail" line="76">
<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-10T00:50:02.525058" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.524755" elapsed="0.000574"/>
</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-10T00:50:02.526385" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.526256" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.526235" elapsed="0.000221"/>
</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-10T00:50:02.531181" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.531068" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.531047" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.532308" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.531874" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.532788" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.532497" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.532876" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:02.533051" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.531471" elapsed="0.001606"/>
</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-10T00:50:02.533481" 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-10T00:50:02.533736" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.533579" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.533562" elapsed="0.000274"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.533338" elapsed="0.000546"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.533182" 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-10T00:50:02.530606" elapsed="0.003368"/>
</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-10T00:50:02.525930" elapsed="0.008122"/>
</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-10T00:50:02.525477" elapsed="0.008630"/>
</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-10T00:50:02.522728" elapsed="0.011432"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.538494" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.534365" elapsed="0.004172">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.522163" elapsed="0.016513">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t15" name="Check Entity Owner Status And Find Owner and Candidate After Fail" 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-10T00:50:02.542049" elapsed="0.000248"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.541755" 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-10T00:50:02.543430" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.543314" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.543294" 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-10T00:50:02.548371" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.548236" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.548215" elapsed="0.000251"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.549515" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.549103" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.550046" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.549704" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.550123" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:02.550293" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.548697" elapsed="0.001632"/>
</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-10T00:50:02.550686" 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-10T00:50:02.550979" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.550785" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.550767" elapsed="0.000298"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.550544" elapsed="0.000545"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.550386" 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-10T00:50:02.547826" elapsed="0.003341"/>
</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-10T00:50:02.542994" 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-10T00:50:02.542506" elapsed="0.008758"/>
</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-10T00:50:02.539675" elapsed="0.011661"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.562715" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>${original_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.558984" elapsed="0.003774">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${new_candidate}</var>
<arg>${new_candidate_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:02.562992" elapsed="0.000027"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:02.563185" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_candidate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:02.563362" elapsed="0.000024"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.539026" elapsed="0.024496">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t16" name="Create Bridge Manually and Verify After Fail" line="90">
<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-10T00:50:02.567361" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.567089" 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-10T00:50:02.568723" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.568597" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.568578" 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-10T00:50:02.573571" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.573460" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.573441" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.574734" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.574348" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.575386" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.574989" elapsed="0.000436"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.575493" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:50:02.575668" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.573912" elapsed="0.001782"/>
</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-10T00:50:02.576120" 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-10T00:50:02.576376" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.576228" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.576210" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.575951" elapsed="0.000525"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.575748" elapsed="0.000752"/>
</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-10T00:50:02.573088" elapsed="0.003465"/>
</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-10T00:50:02.568306" elapsed="0.008301"/>
</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-10T00:50:02.567804" 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-10T00:50:02.564468" elapsed="0.012232"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.584515" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.580715" elapsed="0.003839">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.563835" elapsed="0.020852">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t17" name="Add Port Manually and Verify After Fail" line="94">
<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-10T00:50:02.588354" elapsed="0.000302"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.587990" elapsed="0.000744"/>
</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-10T00:50:02.590179" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.590019" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.589993" elapsed="0.000283"/>
</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-10T00:50:02.596274" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.596164" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.596146" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.597329" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.596951" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.597801" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.597514" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.597889" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:02.598045" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.596562" elapsed="0.001508"/>
</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-10T00:50:02.598414" 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-10T00:50:02.598653" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.598512" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.598494" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.598274" elapsed="0.000476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.598121" elapsed="0.000653"/>
</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-10T00:50:02.595787" elapsed="0.003038"/>
</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-10T00:50:02.589601" elapsed="0.009316"/>
</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-10T00:50:02.589017" elapsed="0.009946"/>
</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-10T00:50:02.585544" elapsed="0.013469"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.606635" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.602820" elapsed="0.003854">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.584983" elapsed="0.021824">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t18" name="Delete the Bridge Manually and Verify After Fail" 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-10T00:50:02.610610" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.610342" elapsed="0.000603"/>
</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-10T00:50:02.611972" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.611827" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.611807" elapsed="0.000255"/>
</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-10T00:50:02.616685" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.616577" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.616560" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.617742" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.617359" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.618253" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.617941" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.618325" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:02.618484" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.616988" elapsed="0.001522"/>
</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-10T00:50:02.618950" 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-10T00:50:02.619201" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.619055" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.619036" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.618768" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.618610" 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-10T00:50:02.616219" 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-10T00:50:02.611534" elapsed="0.007899"/>
</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-10T00:50:02.611100" elapsed="0.008379"/>
</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-10T00:50:02.607976" elapsed="0.011554"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.627263" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>controller_index_list=${new_cluster_list}</arg>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.623386" elapsed="0.003919">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.607193" elapsed="0.020254">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t19" name="Create Bridge In Owner and Verify After Fail" line="102">
<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-10T00:50:02.630695" elapsed="0.000274"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.630434" elapsed="0.000594"/>
</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-10T00:50:02.632045" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.631927" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.631903" 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-10T00:50:02.636905" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.636776" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.636758" elapsed="0.000226"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.637992" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.637584" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.638474" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.638183" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.638546" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:02.638702" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.637207" 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-10T00:50:02.639122" 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-10T00:50:02.639375" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.639228" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.639210" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.638971" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.638782" elapsed="0.000718"/>
</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-10T00:50:02.636410" elapsed="0.003144"/>
</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-10T00:50:02.631604" elapsed="0.008006"/>
</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-10T00:50:02.631182" elapsed="0.008472"/>
</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-10T00:50:02.628382" elapsed="0.011363"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.651096" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.647515" elapsed="0.003626">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.627735" elapsed="0.023565">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t20" name="Create Port In Owner and Verify After Fail" line="106">
<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-10T00:50:02.654542" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.654276" 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-10T00:50:02.655832" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.655719" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.655700" 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-10T00:50:02.660735" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.660623" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.660603" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.661886" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.661434" elapsed="0.000487"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.662407" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.662084" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.662483" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:02.662642" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.661043" elapsed="0.001624"/>
</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-10T00:50:02.663069" 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-10T00:50:02.663324" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.663170" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.663152" elapsed="0.000271"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.662918" elapsed="0.000529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.662719" elapsed="0.000752"/>
</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-10T00:50:02.660245" elapsed="0.003279"/>
</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-10T00:50:02.655432" elapsed="0.008146"/>
</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-10T00:50:02.654997" elapsed="0.008626"/>
</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-10T00:50:02.652221" elapsed="0.011452"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.675205" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.671570" elapsed="0.003676">Variable '${new_owner}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.651588" elapsed="0.023795">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t21" name="Modify the destination IP of Port In Owner After Fail" 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-10T00:50:02.678406" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.678140" 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-10T00:50:02.679712" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.679600" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.679580" 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-10T00:50:02.684618" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.684506" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.684488" elapsed="0.000244"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.685778" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.685385" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.686300" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.686001" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.686374" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:02.686531" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.684987" elapsed="0.001569"/>
</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-10T00:50:02.686940" 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-10T00:50:02.687195" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.687045" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.687027" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.686758" elapsed="0.000537"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.686607" 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-10T00:50:02.684135" elapsed="0.003238"/>
</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-10T00:50:02.679310" elapsed="0.008119"/>
</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-10T00:50:02.678870" elapsed="0.008604"/>
</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-10T00:50:02.676118" elapsed="0.011408"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.695150" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<arg>${new_cluster_list}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.691596" elapsed="0.003598">Variable '${new_owner}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.675572" elapsed="0.019761">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t22" name="Verify Port Is Modified After Fail" line="114">
<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-10T00:50:02.698319" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.698057" 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-10T00:50:02.699621" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.699507" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.699488" 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-10T00:50:02.704370" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.704260" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.704241" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.705475" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.705092" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.705973" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.705663" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.706044" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:02.706204" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.704689" 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-10T00:50:02.706574" 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-10T00:50:02.706872" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.706673" elapsed="0.000296"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.706655" elapsed="0.000341"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.706432" elapsed="0.000588"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.706282" elapsed="0.000763"/>
</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-10T00:50:02.703896" 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-10T00:50:02.699216" elapsed="0.007941"/>
</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-10T00:50:02.698744" elapsed="0.008459"/>
</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-10T00:50:02.696045" elapsed="0.011213"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<msg time="2026-04-10T00:50:02.715141" level="FAIL">Variable '${new_cluster_list}' not found.</msg>
<arg>${new_cluster_list}</arg>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.711362" elapsed="0.003819">Variable '${new_cluster_list}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.695527" elapsed="0.019791">Variable '${new_cluster_list}' not found.</status>
</test>
<test id="s1-s2-s2-t23" name="Start Old Candidate Instance" line="118">
<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-10T00:50:02.718225" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.717959" elapsed="0.000531"/>
</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-10T00:50:02.719515" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.719403" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.719384" 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-10T00:50:02.724288" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.724176" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.724157" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.725430" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.724977" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.725929" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.725618" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.726003" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:02.726160" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.724582" elapsed="0.001604"/>
</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-10T00:50:02.726529" 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-10T00:50:02.726772" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.726626" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.726608" elapsed="0.000280"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.726387" elapsed="0.000525"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.726237" 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-10T00:50:02.723778" 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-10T00:50:02.719113" elapsed="0.007935"/>
</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-10T00:50:02.718636" elapsed="0.008457"/>
</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-10T00:50:02.715973" elapsed="0.011173"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-10T00:50:02.731310" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.727374" elapsed="0.003975">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Start Owner Instance and verify it is active</doc>
<status status="FAIL" start="2026-04-10T00:50:02.715507" elapsed="0.015974">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t24" name="Check Shards Status After Recover" 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-10T00:50:02.735898" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:50:02.735602" elapsed="0.000609"/>
</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-10T00:50:02.737350" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.737216" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.737196" elapsed="0.000251"/>
</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-10T00:50:02.742147" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:50:02.742035" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-10T00:50:02.742015" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.743303" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.742882" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.743827" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.743492" elapsed="0.000379"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.743922" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:50:02.744094" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.742438" elapsed="0.001682"/>
</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-10T00:50:02.744560" 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-10T00:50:02.744816" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.744668" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.744649" elapsed="0.000264"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.744408" elapsed="0.000529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.744239" elapsed="0.000723"/>
</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-10T00:50:02.741638" elapsed="0.003432"/>
</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-10T00:50:02.736906" elapsed="0.008232"/>
</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-10T00:50:02.736428" elapsed="0.008760"/>
</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-10T00:50:02.732257" elapsed="0.012984"/>
</kw>
<kw name="Check Ovsdb Shards Status After Cluster Event" owner="ClusterOvsdb">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:02.766832" elapsed="0.000303"/>
</kw>
<msg time="2026-04-10T00:50:02.767201" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:02.766156" elapsed="0.001107"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:02.765625" elapsed="0.001728"/>
</kw>
<msg time="2026-04-10T00:50:02.767408" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:02.757183" elapsed="0.010282"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:02.756761" elapsed="0.010787"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.768024" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:02.767727" 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-10T00:50:02.773524" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.773019" elapsed="0.000533"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.774055" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.773725" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:02.774153" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:50:02.774345" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:02.772598" elapsed="0.001775"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:02.774533" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.775281" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:02.774908" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.775759" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.775495" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.776238" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:02.775955" elapsed="0.000311"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:02.776692" 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-10T00:50:02.776958" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.776798" 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-10T00:50:02.777206" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.777040" 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-10T00:50:02.777438" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:02.777294" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:02.776779" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:02.776523" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.776324" elapsed="0.001236"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:02.777599" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:02.777801" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:02.777865" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:02.771798" elapsed="0.006093"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.778399" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:02.778479" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:02.778095" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:02.779134" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.778827" elapsed="0.000395">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:02.778573" elapsed="0.000716">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:02.778554" 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-10T00:50:02.779474" 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-10T00:50:02.779647" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:02.779714" 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-10T00:50:02.769158" elapsed="0.010666">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:02.768874" elapsed="0.011065">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:02.768727" elapsed="0.011273">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.768339" 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-10T00:50:02.780394" elapsed="0.000028"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.748150" elapsed="0.032370">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:03.806132" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:50:03.806468" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:03.805400" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:03.804824" elapsed="0.001802"/>
</kw>
<msg time="2026-04-10T00:50:03.806675" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:03.796551" elapsed="0.010171"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:03.796008" elapsed="0.010795"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.807335" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:03.807066" 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-10T00:50:03.812766" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:03.812331" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.813281" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:03.812982" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:03.813357" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:03.813523" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:03.811943" 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-10T00:50:03.813749" elapsed="0.000200"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.814502" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:03.814116" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.814960" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:03.814687" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.815378" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:03.815135" 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-10T00:50:03.815839" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:03.816116" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:03.815969" 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-10T00:50:03.816338" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:03.816197" 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-10T00:50:03.816803" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:03.816638" elapsed="0.000240"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:03.815948" elapsed="0.000955"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:03.815650" elapsed="0.001279"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:03.815456" elapsed="0.001499"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:03.817072" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:03.817290" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:03.817338" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:03.811172" elapsed="0.006190"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.817842" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:03.817943" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:03.817536" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:03.818582" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:03.818268" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:03.818042" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:03.818022" 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-10T00:50:03.818939" 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-10T00:50:03.819117" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:03.819187" 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-10T00:50:03.808553" elapsed="0.010747">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:03.808315" elapsed="0.011057">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:03.808173" elapsed="0.011256">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:03.807738" elapsed="0.011786">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:03.819769" elapsed="0.000028"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:03.782026" elapsed="0.037895">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:04.844241" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:50:04.844547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:04.843570" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:04.843086" elapsed="0.001606"/>
</kw>
<msg time="2026-04-10T00:50:04.844752" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:04.835057" elapsed="0.009756"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:04.834618" elapsed="0.010312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.845431" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:04.845143" 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-10T00:50:04.850758" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:04.850365" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.851254" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:04.850961" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:04.851328" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:04.851559" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:04.849984" 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-10T00:50:04.851737" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.852416" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:04.852076" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.852858" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:04.852600" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.853277" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:04.853034" 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-10T00:50:04.853740" 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-10T00:50:04.854039" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:04.853894" 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-10T00:50:04.854263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:04.854120" 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-10T00:50:04.854474" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:04.854338" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:04.853872" elapsed="0.000674"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:04.853569" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:04.853352" elapsed="0.001242"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:04.854634" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:50:04.854832" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:04.854893" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:04.849230" elapsed="0.005687"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.855357" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:04.855433" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:04.855085" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:04.856030" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:04.855738" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:04.855525" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:04.855507" 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-10T00:50:04.856352" 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-10T00:50:04.856521" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:04.856587" 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-10T00:50:04.846526" elapsed="0.010176">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:04.846289" elapsed="0.010483">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:04.846146" elapsed="0.010681">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:04.845713" elapsed="0.011222">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:04.857180" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:04.820713" elapsed="0.036583">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:05.883112" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:50:05.883428" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:05.882450" elapsed="0.001043"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:05.881991" elapsed="0.001581"/>
</kw>
<msg time="2026-04-10T00:50:05.883619" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:05.873528" elapsed="0.010136"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:05.872806" elapsed="0.010933"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.884203" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:05.883943" 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-10T00:50:05.889295" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:05.888907" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.889793" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:05.889502" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:05.889884" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:05.890045" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:05.888524" 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-10T00:50:05.890219" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.890884" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:05.890535" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.891307" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:05.891069" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.891713" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:05.891479" 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-10T00:50:05.892145" 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-10T00:50:05.892459" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:05.892254" 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-10T00:50:05.892711" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:05.892569" 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-10T00:50:05.892981" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:05.892790" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:05.892234" elapsed="0.000826"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:05.891980" elapsed="0.001104"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:05.891785" elapsed="0.001324"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:05.893150" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:05.893367" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:05.893414" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:05.887798" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.893968" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:05.894047" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:05.893678" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:05.894831" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:05.894361" elapsed="0.000559">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:05.894144" elapsed="0.000843">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:05.894124" elapsed="0.000895">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:05.895175" 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-10T00:50:05.895348" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:05.895415" 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-10T00:50:05.885254" elapsed="0.010270">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:05.885024" elapsed="0.010570">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:05.884882" elapsed="0.010767">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:05.884474" elapsed="0.011263">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:05.895983" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:05.858178" elapsed="0.037922">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:06.920046" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:50:06.920356" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:06.919350" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:06.918887" elapsed="0.001615"/>
</kw>
<msg time="2026-04-10T00:50:06.920549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:06.910892" elapsed="0.009704"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:06.910456" elapsed="0.010216"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.921168" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:06.920897" 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-10T00:50:06.926387" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:06.925989" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.926876" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:06.926572" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:06.926952" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:06.927111" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:06.925462" 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-10T00:50:06.927285" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.927944" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:06.927596" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.928645" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:06.928205" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.929128" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:06.928824" 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-10T00:50:06.929558" 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-10T00:50:06.929817" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:06.929669" 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-10T00:50:06.930059" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:06.929917" 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-10T00:50:06.930299" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:06.930140" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:06.929649" elapsed="0.000729"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:06.929391" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:06.929204" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:06.930469" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:06.930675" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:06.930723" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:06.924701" elapsed="0.006047"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.931215" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:06.931296" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:06.930938" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:06.931911" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:06.931613" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:06.931393" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:06.931374" 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-10T00:50:06.932235" 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-10T00:50:06.932410" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:06.932477" 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-10T00:50:06.922231" elapsed="0.010356">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:06.921997" elapsed="0.010662">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:06.921856" elapsed="0.010860">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:06.921449" 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-10T00:50:06.933073" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:06.896994" elapsed="0.036198">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:07.958676" elapsed="0.000262"/>
</kw>
<msg time="2026-04-10T00:50:07.959006" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:07.958033" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:07.957558" elapsed="0.001688"/>
</kw>
<msg time="2026-04-10T00:50:07.959294" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:07.949421" elapsed="0.009918"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:07.949007" elapsed="0.010409"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.959876" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:07.959602" 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-10T00:50:07.965190" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:07.964785" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.965665" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:07.965377" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:07.965741" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:07.965916" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:07.964411" 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-10T00:50:07.966094" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.966744" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:07.966407" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.967186" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:07.966942" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.967597" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:07.967358" 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-10T00:50:07.968031" 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-10T00:50:07.968282" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:07.968138" 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-10T00:50:07.968535" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:07.968392" 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-10T00:50:07.968750" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:07.968612" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:07.968119" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:07.967864" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:07.967671" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:07.968929" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:07.969130" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:07.969177" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:07.963654" elapsed="0.005547"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.969640" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:07.969717" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:07.969371" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:07.970317" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:07.970041" elapsed="0.000345">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:07.969811" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:07.969792" 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-10T00:50:07.970702" 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-10T00:50:07.970947" elapsed="0.000031"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:07.971040" elapsed="0.000091"/>
</return>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-10T00:50:07.960957" elapsed="0.010277">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:07.960709" elapsed="0.010600">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:07.960569" elapsed="0.010798">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:07.960153" 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-10T00:50:07.971700" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:07.934095" elapsed="0.037723">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:08.997878" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:50:08.998188" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:08.997215" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:08.996737" elapsed="0.001593"/>
</kw>
<msg time="2026-04-10T00:50:08.998376" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:08.988465" elapsed="0.009957"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:08.988042" elapsed="0.010455"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:08.998961" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:08.998687" 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-10T00:50:09.004050" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:09.003607" elapsed="0.000475"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.004687" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:09.004264" elapsed="0.000460"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:09.004792" elapsed="0.000042"/>
</return>
<msg time="2026-04-10T00:50:09.005049" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:09.003237" 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-10T00:50:09.005296" elapsed="0.000218"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.006232" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:09.005731" elapsed="0.000538"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.006837" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:09.006493" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.007423" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:09.007097" 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-10T00:50:09.008059" 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-10T00:50:09.008550" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:09.008333" 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-10T00:50:09.008886" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:09.008668" 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-10T00:50:09.009193" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:09.008998" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:09.008299" elapsed="0.000999"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:09.007776" elapsed="0.001560"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:09.007524" elapsed="0.001847"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:09.009426" elapsed="0.000039"/>
</return>
<msg time="2026-04-10T00:50:09.009703" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:09.009768" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:09.002508" elapsed="0.007292"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.010434" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:09.010541" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:09.010058" elapsed="0.000517"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:09.011630" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:09.011234" elapsed="0.000494">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:09.010670" elapsed="0.001150">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:09.010645" elapsed="0.001251">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:09.012124" 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-10T00:50:09.012368" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:09.012459" 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-10T00:50:09.000025" elapsed="0.012594">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:08.999763" elapsed="0.012957">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:08.999625" elapsed="0.013169">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:08.999232" elapsed="0.013708">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:09.013264" elapsed="0.000035"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:08.972622" elapsed="0.040804">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:10.040825" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:50:10.041164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:10.040176" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:10.039692" elapsed="0.001617"/>
</kw>
<msg time="2026-04-10T00:50:10.041360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:10.029542" elapsed="0.011863"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:10.028909" elapsed="0.012677"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.042082" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:10.041793" 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-10T00:50:10.047536" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:10.047086" elapsed="0.000478"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.048033" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:10.047725" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:10.048127" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:50:10.048297" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:10.046694" 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-10T00:50:10.048478" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.049189" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:10.048810" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.049626" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:10.049374" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.050116" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:10.049862" 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-10T00:50:10.050546" 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-10T00:50:10.050802" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:10.050656" 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-10T00:50:10.051050" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:10.050907" 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-10T00:50:10.051270" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:10.051126" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:10.050637" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:10.050379" elapsed="0.000997"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:10.050192" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:10.051461" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:10.051665" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:10.051712" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:10.045973" elapsed="0.005762"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.052197" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:10.052274" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:10.051922" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:10.052913" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:10.052585" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:10.052367" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:10.052348" elapsed="0.000737">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:10.053237" 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-10T00:50:10.053414" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:10.053479" 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-10T00:50:10.043230" elapsed="0.010406">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:10.042913" elapsed="0.010794">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:10.042754" elapsed="0.011006">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:10.042358" elapsed="0.011506">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:10.054098" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:10.014414" elapsed="0.039799">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:11.081217" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:50:11.081525" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:11.080547" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:11.080070" elapsed="0.001599"/>
</kw>
<msg time="2026-04-10T00:50:11.081715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:11.071938" elapsed="0.009822"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:11.071481" elapsed="0.010354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.082307" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:11.082038" 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-10T00:50:11.089211" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:11.088651" elapsed="0.000599"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.089890" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:11.089471" elapsed="0.000457"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:11.089993" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:50:11.090212" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:11.088127" elapsed="0.002120"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:11.090461" elapsed="0.000215"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.091419" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:11.090932" elapsed="0.000525"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.092037" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:11.091676" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.092644" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:11.092278" 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-10T00:50:11.093285" 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-10T00:50:11.093636" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:11.093437" elapsed="0.000316"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:11.094024" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:11.093792" elapsed="0.000395"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:11.094428" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:11.094225" elapsed="0.000279"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:11.093410" elapsed="0.001129"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:11.093047" elapsed="0.001527"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:11.092753" elapsed="0.001858"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:11.094666" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:50:11.095036" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:11.095117" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:11.087110" elapsed="0.008042"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.095812" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:11.095913" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:11.095498" elapsed="0.000441"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:11.096713" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:11.096232" elapsed="0.000557">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:11.096012" elapsed="0.000863">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:11.095992" elapsed="0.000918">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:11.097066" 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-10T00:50:11.097241" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:11.097309" 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-10T00:50:11.083522" elapsed="0.013901">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:11.083207" elapsed="0.014287">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:11.083055" elapsed="0.014494">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:11.082610" elapsed="0.015033">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:11.097894" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:11.055247" elapsed="0.042770">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:12.123047" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:50:12.123371" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:12.122352" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:12.121890" elapsed="0.001632"/>
</kw>
<msg time="2026-04-10T00:50:12.123568" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:12.112592" 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-10T00:50:12.112177" elapsed="0.011508"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.124159" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:12.123898" 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-10T00:50:12.129341" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:12.128950" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.129820" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:12.129532" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:12.129914" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:12.130075" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:12.128477" 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-10T00:50:12.130251" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.130952" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:12.130597" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.131577" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:12.131133" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.132014" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:12.131752" 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-10T00:50:12.132441" 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-10T00:50:12.132697" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:12.132552" 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-10T00:50:12.132934" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:12.132778" 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-10T00:50:12.133155" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:12.133014" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:12.132532" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:12.132272" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:12.132088" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:12.133321" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:12.133522" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:12.133570" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:12.127749" elapsed="0.005844"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.134049" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:12.134127" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:12.133761" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:12.134740" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:12.134460" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:12.134220" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:12.134202" 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-10T00:50:12.135081" 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-10T00:50:12.135252" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:12.135319" 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-10T00:50:12.125237" elapsed="0.010189">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:12.124991" elapsed="0.010505">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:12.124828" elapsed="0.010722">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:12.124432" elapsed="0.011208">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:12.135929" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:12.098928" elapsed="0.037119">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:13.161640" elapsed="0.000268"/>
</kw>
<msg time="2026-04-10T00:50:13.161992" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:13.160974" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:13.160494" elapsed="0.001650"/>
</kw>
<msg time="2026-04-10T00:50:13.162190" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:13.151448" elapsed="0.010788"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:13.150884" elapsed="0.011425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.162765" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:13.162507" 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-10T00:50:13.168271" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:13.167795" elapsed="0.000505"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.168819" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:13.168477" elapsed="0.000389"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:13.168919" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:50:13.169087" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:13.167424" 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-10T00:50:13.169266" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.169959" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:13.169584" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.170386" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:13.170145" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.170793" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:13.170557" 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-10T00:50:13.171230" 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-10T00:50:13.171483" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:13.171339" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:13.171698" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:13.171561" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:13.171932" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:13.171774" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:13.171319" elapsed="0.000689"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:13.171065" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:13.170882" elapsed="0.001175"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:13.172163" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:13.172366" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:13.172413" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:13.166689" elapsed="0.005747"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.172895" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:13.172973" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:13.172606" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:13.173564" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:13.173282" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:13.173067" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:13.173048" 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-10T00:50:13.173901" 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-10T00:50:13.174089" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:13.174154" 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-10T00:50:13.163927" elapsed="0.010336">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:13.163670" elapsed="0.010663">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:13.163526" elapsed="0.010862">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:13.163126" elapsed="0.011353">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:13.174709" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:13.136838" elapsed="0.037986">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:14.201261" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:50:14.201600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:14.200592" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:14.200131" elapsed="0.001617"/>
</kw>
<msg time="2026-04-10T00:50:14.201795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:14.191242" 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-10T00:50:14.190766" elapsed="0.011169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.202504" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:14.202129" elapsed="0.000423"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.207629" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:14.207199" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.208201" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:14.207822" elapsed="0.000405"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:14.208277" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:14.208519" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:14.206817" elapsed="0.001728"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:14.208697" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.209387" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:14.209034" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.209857" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:14.209600" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.210270" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:14.210032" 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-10T00:50:14.210703" 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-10T00:50:14.210970" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:14.210811" 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-10T00:50:14.211190" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:14.211052" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:14.211406" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:14.211267" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:14.210791" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:14.210532" elapsed="0.000971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:14.210343" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:14.211569" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:14.211767" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:14.211813" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:14.206102" elapsed="0.005771"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.212321" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:14.212397" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:14.212044" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:14.213190" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:14.212700" elapsed="0.000562">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:14.212488" elapsed="0.000841">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:14.212470" elapsed="0.000891">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:14.213534" 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-10T00:50:14.213706" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:14.213771" 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-10T00:50:14.203582" elapsed="0.010313">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:14.203347" elapsed="0.010619">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:14.203202" 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-10T00:50:14.202786" elapsed="0.011324">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:14.214337" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:14.175633" elapsed="0.038818">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:15.240647" elapsed="0.000264"/>
</kw>
<msg time="2026-04-10T00:50:15.240990" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:15.239935" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:15.239458" elapsed="0.001680"/>
</kw>
<msg time="2026-04-10T00:50:15.241186" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:15.230441" elapsed="0.010790"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:15.229871" elapsed="0.011433"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.241811" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:15.241501" 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-10T00:50:15.247195" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:15.246790" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.247672" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:15.247383" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:15.247747" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:15.247923" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:15.246419" 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-10T00:50:15.248100" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.248966" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:15.248414" elapsed="0.000594"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.249413" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:15.249168" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.249835" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:15.249593" 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-10T00:50:15.250277" 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-10T00:50:15.250534" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:15.250386" 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-10T00:50:15.250754" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:15.250615" 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-10T00:50:15.250988" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:15.250831" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:15.250366" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:15.250112" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:15.249927" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:15.251153" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:15.251355" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:15.251401" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:15.245670" elapsed="0.005755"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.251956" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:15.252035" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:15.251665" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:15.252627" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:15.252349" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:15.252131" elapsed="0.000635">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:15.252112" 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-10T00:50:15.252965" 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-10T00:50:15.253152" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:15.253219" 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-10T00:50:15.242895" elapsed="0.010434">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:15.242645" elapsed="0.010755">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:15.242504" 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-10T00:50:15.242108" 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-10T00:50:15.253781" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:15.215352" elapsed="0.038561">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:16.282046" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:50:16.282367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:16.281304" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:16.280736" elapsed="0.001802"/>
</kw>
<msg time="2026-04-10T00:50:16.282590" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:16.272207" elapsed="0.010430"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:16.271678" elapsed="0.011050"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.283243" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:16.282959" 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-10T00:50:16.289078" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:16.288617" elapsed="0.000493"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.289580" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:16.289276" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:16.289664" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:50:16.289838" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:16.288199" elapsed="0.001683"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:16.290063" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.290777" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:16.290397" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.291335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:16.291070" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.291784" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:16.291522" 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-10T00:50:16.292268" 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-10T00:50:16.292571" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:16.292383" 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-10T00:50:16.292819" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:16.292660" elapsed="0.000235"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:16.293067" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:16.292921" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:16.292362" elapsed="0.000782"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:16.292086" elapsed="0.001083"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:16.291883" elapsed="0.001312"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:16.293239" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:16.293452" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:16.293500" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:16.287415" elapsed="0.006110"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.294025" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:16.294107" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:16.293706" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:16.294734" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:16.294433" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:16.294205" elapsed="0.000691">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:16.294185" elapsed="0.000746">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:16.295089" 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-10T00:50:16.295267" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:16.295338" 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-10T00:50:16.284544" elapsed="0.010910">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:16.284119" elapsed="0.011409">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:16.283976" 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-10T00:50:16.283545" elapsed="0.012139">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:16.295986" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:16.254678" elapsed="0.041433">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:17.320729" elapsed="0.000254"/>
</kw>
<msg time="2026-04-10T00:50:17.321049" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:17.320056" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:17.319513" elapsed="0.001778"/>
</kw>
<msg time="2026-04-10T00:50:17.321339" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:17.310955" elapsed="0.010459"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:17.310263" elapsed="0.011233"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.321994" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:17.321694" 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-10T00:50:17.327351" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:17.326929" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.327833" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:17.327543" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:17.327925" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:17.328109" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:17.326529" 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-10T00:50:17.328287" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.328961" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:17.328611" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.329381" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:17.329143" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.329791" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:17.329556" 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-10T00:50:17.330257" 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-10T00:50:17.330512" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:17.330366" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:17.330729" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:17.330591" 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-10T00:50:17.330961" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:17.330805" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:17.330346" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:17.330083" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:17.329889" elapsed="0.001194"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:17.331124" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:17.331324" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:17.331370" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:17.325787" elapsed="0.005606"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.331856" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:17.331936" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:17.331561" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:17.332768" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:17.332477" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:17.332041" elapsed="0.000959">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:17.332022" 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-10T00:50:17.333189" 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-10T00:50:17.333362" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:17.333427" 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-10T00:50:17.323085" elapsed="0.010449">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:17.322834" elapsed="0.010769">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:17.322693" elapsed="0.010965">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:17.322283" elapsed="0.011463">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:17.334000" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:17.296922" elapsed="0.037194">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:18.358817" elapsed="0.000266"/>
</kw>
<msg time="2026-04-10T00:50:18.359153" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:18.358150" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:18.357665" elapsed="0.001638"/>
</kw>
<msg time="2026-04-10T00:50:18.359350" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:18.349442" elapsed="0.009954"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:18.349005" elapsed="0.010467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.359959" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:18.359679" 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-10T00:50:18.365246" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:18.364855" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.365724" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:18.365433" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:18.365798" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:18.365973" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:18.364471" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:18.366150" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.366802" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:18.366464" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.367244" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:18.367003" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.367697" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:18.367416" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:18.368135" 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-10T00:50:18.368463" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:18.368316" 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-10T00:50:18.368687" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:18.368545" 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-10T00:50:18.368922" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:18.368765" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:18.368296" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:18.367967" elapsed="0.001057"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:18.367770" elapsed="0.001280"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:18.369089" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:18.369292" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:18.369340" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:18.363732" elapsed="0.005632"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.369804" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:18.369897" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:18.369535" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:18.370486" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:18.370209" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:18.369992" elapsed="0.000629">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:18.369974" elapsed="0.000678">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:18.370805" 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-10T00:50:18.370993" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:18.371061" 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-10T00:50:18.361038" elapsed="0.010130">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:18.360784" elapsed="0.010454">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:18.360642" elapsed="0.010652">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:18.360239" elapsed="0.011147">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:18.371640" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:18.335019" elapsed="0.036741">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:19.397195" elapsed="0.000240"/>
</kw>
<msg time="2026-04-10T00:50:19.397501" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:19.396519" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:19.396024" elapsed="0.001620"/>
</kw>
<msg time="2026-04-10T00:50:19.397689" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:19.387925" elapsed="0.009809"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:19.387496" elapsed="0.010400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.398493" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:19.398090" elapsed="0.000448"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.403618" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:19.403207" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.404109" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:19.403804" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:19.404183" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:19.404340" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:19.402807" 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-10T00:50:19.404516" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.405191" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:19.404834" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.405616" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:19.405377" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.406040" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:19.405788" 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-10T00:50:19.406457" 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-10T00:50:19.406706" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:19.406563" 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-10T00:50:19.406942" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:19.406787" 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-10T00:50:19.407192" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:19.407021" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:19.406543" elapsed="0.000725"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:19.406292" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:19.406113" elapsed="0.001204"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:19.407356" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:19.407561" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:19.407608" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:19.402095" elapsed="0.005537"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.408088" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:19.408165" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:19.407804" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:19.410377" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:19.410090" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:19.409860" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:19.408239" elapsed="0.002307">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:19.410703" 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-10T00:50:19.410890" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:19.410958" 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-10T00:50:19.399597" elapsed="0.011520">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:19.399360" elapsed="0.011830">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:19.399217" elapsed="0.012028">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:19.398763" elapsed="0.012572">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:19.411579" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:19.372554" elapsed="0.039144">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:20.438782" elapsed="0.000277"/>
</kw>
<msg time="2026-04-10T00:50:20.439133" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:20.438042" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:20.437539" elapsed="0.001748"/>
</kw>
<msg time="2026-04-10T00:50:20.439335" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:20.428300" elapsed="0.011091"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:20.427691" elapsed="0.011780"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.440003" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:20.439685" elapsed="0.000367"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.445435" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:20.445040" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.445938" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:20.445626" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:20.446014" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:20.446173" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:20.444646" 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-10T00:50:20.446354" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.447060" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:20.446701" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.447521" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:20.447245" elapsed="0.000306"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.447980" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:20.447701" 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-10T00:50:20.448406" 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-10T00:50:20.448660" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:20.448514" 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-10T00:50:20.448894" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:20.448739" elapsed="0.000281"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:20.449190" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:20.449045" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:20.448495" elapsed="0.000771"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:20.448238" elapsed="0.001053"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:20.448055" elapsed="0.001262"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:20.449357" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:50:20.449557" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:20.449604" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:20.443927" elapsed="0.005702"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.450089" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:20.450167" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:20.449801" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:20.450786" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:20.450477" elapsed="0.000396">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:20.450260" elapsed="0.000679">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:20.450242" 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-10T00:50:20.451123" 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-10T00:50:20.451294" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:20.451360" 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-10T00:50:20.441121" elapsed="0.010345">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:20.440872" elapsed="0.010664">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:20.440699" elapsed="0.010892">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:20.440288" 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-10T00:50:20.452060" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:20.412572" elapsed="0.039650">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:21.476978" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:50:21.477309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:21.476302" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:21.475815" elapsed="0.001648"/>
</kw>
<msg time="2026-04-10T00:50:21.477510" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:21.467668" elapsed="0.009888"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:21.467221" elapsed="0.010411"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.478133" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:21.477834" 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-10T00:50:21.483485" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:21.483076" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.483990" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:21.483679" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:21.484070" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:21.484238" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:21.482592" 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-10T00:50:21.484420" elapsed="0.000189"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.485137" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:21.484775" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.485562" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:21.485322" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.485990" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:21.485733" 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-10T00:50:21.486467" 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-10T00:50:21.486730" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:21.486580" 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-10T00:50:21.486967" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:21.486811" 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-10T00:50:21.487186" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:21.487045" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:21.486560" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:21.486295" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:21.486066" elapsed="0.001247"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:21.487355" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:21.487556" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:21.487604" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:21.481796" elapsed="0.005831"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.488107" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:21.488184" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:21.487804" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:21.489051" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:21.488491" elapsed="0.000641">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:21.488277" elapsed="0.000928">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:21.488258" elapsed="0.000981">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:21.489400" 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-10T00:50:21.489576" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:21.489643" 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-10T00:50:21.479228" elapsed="0.010526">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:21.478986" elapsed="0.010839">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:21.478818" elapsed="0.011081">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:21.478416" elapsed="0.011577">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:21.490333" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:21.453088" elapsed="0.037368">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:22.516189" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:50:22.516500" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:22.515343" elapsed="0.001221"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:22.514878" elapsed="0.001766"/>
</kw>
<msg time="2026-04-10T00:50:22.516689" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:22.505209" elapsed="0.011524"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:22.504630" elapsed="0.012176"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.517267" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:22.517010" 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-10T00:50:22.522374" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:22.521983" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.522875" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:22.522562" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:22.522952" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:22.523109" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:22.521559" 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-10T00:50:22.523286" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.523955" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:22.523599" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.524589" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:22.524137" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.525031" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:22.524765" 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-10T00:50:22.525460" 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-10T00:50:22.525748" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:22.525577" 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-10T00:50:22.525988" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:22.525831" 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-10T00:50:22.526208" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:22.526067" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:22.525553" elapsed="0.000730"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:22.525290" elapsed="0.001017"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:22.525105" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:22.526452" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:22.526667" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:22.526713" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:22.520829" elapsed="0.005908"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.527197" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:22.527274" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:22.526923" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:22.527875" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:22.527583" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:22.527368" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:22.527349" 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-10T00:50:22.528202" 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-10T00:50:22.528375" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:22.528441" 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-10T00:50:22.518349" elapsed="0.010201">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:22.518114" elapsed="0.010505">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:22.517973" elapsed="0.010701">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:22.517541" elapsed="0.011264">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:22.529073" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:22.491096" elapsed="0.038097">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:23.555052" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:50:23.555367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:23.554372" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:23.553904" elapsed="0.001748"/>
</kw>
<msg time="2026-04-10T00:50:23.555698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:23.545781" elapsed="0.009962"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:23.545367" elapsed="0.010452"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.556286" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:23.556026" 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-10T00:50:23.561747" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:23.561346" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.562251" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:23.561953" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:23.562328" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:50:23.562575" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:23.560934" elapsed="0.001670"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:23.562760" elapsed="0.000178"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.563452" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:23.563104" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.563914" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:23.563638" elapsed="0.000304"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.564343" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:23.564094" 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-10T00:50:23.564776" 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-10T00:50:23.565082" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:23.564924" 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-10T00:50:23.565414" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:23.565228" 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-10T00:50:23.565658" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:23.565512" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:23.564897" elapsed="0.000837"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:23.564610" elapsed="0.001149"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:23.564417" elapsed="0.001368"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:23.565826" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:50:23.566048" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:23.566095" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:23.560169" elapsed="0.005951"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.566577" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:23.566659" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:23.566292" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:23.567272" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:23.566991" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:23.566757" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:23.566738" 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-10T00:50:23.567593" 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-10T00:50:23.567766" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:23.567834" 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-10T00:50:23.557368" elapsed="0.010595">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:23.557113" elapsed="0.010922">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:23.556972" elapsed="0.011119">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:23.556558" elapsed="0.011626">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:23.568419" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:23.530044" elapsed="0.038493">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:24.596128" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:50:24.596444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:24.595455" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:24.594988" elapsed="0.001600"/>
</kw>
<msg time="2026-04-10T00:50:24.596654" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:24.585569" elapsed="0.011133"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:24.584973" elapsed="0.011805"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.597249" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:24.596987" 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-10T00:50:24.602363" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:24.601970" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.602870" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:24.602553" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:24.602947" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:24.603107" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:24.601579" 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-10T00:50:24.603285" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.603957" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:24.603602" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.604382" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:24.604140" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.604812" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:24.604554" 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-10T00:50:24.605253" 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-10T00:50:24.605508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:24.605362" 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-10T00:50:24.605728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:24.605587" 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-10T00:50:24.605971" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:24.605806" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:24.605342" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:24.605085" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:24.604902" elapsed="0.001194"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:24.606135" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:24.606336" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:24.606383" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:24.600824" elapsed="0.005582"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.606938" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:24.607019" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:24.606646" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:24.607803" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:24.607515" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:24.607115" elapsed="0.000843">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:24.607095" 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-10T00:50:24.608147" 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-10T00:50:24.608321" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:24.608390" 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-10T00:50:24.598305" elapsed="0.010193">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:24.598072" elapsed="0.010497">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:24.597930" elapsed="0.010694">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:24.597521" elapsed="0.011211">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:24.608982" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:24.569420" elapsed="0.039680">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:25.634414" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:50:25.634726" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:25.633649" elapsed="0.001142"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:25.633185" elapsed="0.001704"/>
</kw>
<msg time="2026-04-10T00:50:25.634939" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:25.625082" elapsed="0.009903"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:25.624648" elapsed="0.010412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.635543" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:25.635269" 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-10T00:50:25.640865" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:25.640457" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.641345" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:25.641054" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:25.641420" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:25.641579" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:25.640065" 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-10T00:50:25.641758" elapsed="0.000217"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.642484" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:25.642140" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.643025" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:25.642754" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.643471" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:25.643203" 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-10T00:50:25.643935" 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-10T00:50:25.644224" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:25.644047" 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-10T00:50:25.644447" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:25.644307" 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-10T00:50:25.644664" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:25.644523" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:25.644027" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:25.643734" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:25.643546" elapsed="0.001241"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:25.644832" elapsed="0.000051"/>
</return>
<msg time="2026-04-10T00:50:25.645092" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:25.645150" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:25.639315" elapsed="0.005864"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.645659" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:25.645740" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:25.645372" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:25.646347" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:25.646066" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:25.645833" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:25.645815" 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-10T00:50:25.646674" 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-10T00:50:25.646860" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:25.646929" 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-10T00:50:25.636644" elapsed="0.010403">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:25.636407" elapsed="0.010711">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:25.636264" elapsed="0.010909">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:25.635821" elapsed="0.011444">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:25.647506" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:25.609927" elapsed="0.037696">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:26.671428" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:50:26.671806" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:26.670769" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:26.670308" elapsed="0.001755"/>
</kw>
<msg time="2026-04-10T00:50:26.672112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:26.662294" elapsed="0.009865"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:26.661880" elapsed="0.010356"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.672690" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:26.672427" 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-10T00:50:26.677724" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:26.677337" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.678212" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:26.677924" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:26.678286" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:26.678444" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:26.676968" 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-10T00:50:26.678618" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.679284" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:26.678948" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.679723" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:26.679465" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.680150" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:26.679913" 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-10T00:50:26.680566" 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-10T00:50:26.680922" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:26.680672" 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-10T00:50:26.681408" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:26.681100" elapsed="0.000425"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:26.681917" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:26.681577" elapsed="0.000455"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:26.680653" elapsed="0.001430"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:26.680402" elapsed="0.001731"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:26.680222" elapsed="0.001966"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:26.682274" elapsed="0.000061"/>
</return>
<msg time="2026-04-10T00:50:26.682712" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:26.682816" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:26.676247" elapsed="0.006650"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.684138" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:26.684314" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:26.683350" elapsed="0.001018"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:26.685352" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:26.685067" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:26.684519" elapsed="0.001013">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:26.684478" elapsed="0.001089">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:26.685719" 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-10T00:50:26.685905" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:26.685972" 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-10T00:50:26.673740" elapsed="0.012340">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:26.673511" elapsed="0.012638">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:26.673374" elapsed="0.012829">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:26.672980" elapsed="0.013313">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:26.686660" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:26.648480" elapsed="0.038297">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:27.713418" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:50:27.713736" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:27.712690" elapsed="0.001115"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:27.712155" elapsed="0.001752"/>
</kw>
<msg time="2026-04-10T00:50:27.713956" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:27.703887" elapsed="0.010120"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:27.703340" elapsed="0.010748"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.714582" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:27.714296" 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-10T00:50:27.720237" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:27.719757" elapsed="0.000513"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.720744" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:27.720438" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:27.720823" elapsed="0.000056"/>
</return>
<msg time="2026-04-10T00:50:27.721020" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:27.719363" 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-10T00:50:27.721207" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.722024" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:27.721602" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.722482" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:27.722225" elapsed="0.000298"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.723000" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:27.722693" elapsed="0.000336"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:27.723554" 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-10T00:50:27.723931" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:27.723760" 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-10T00:50:27.724157" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:27.724017" 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-10T00:50:27.724373" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:27.724235" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:27.723739" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:27.723365" elapsed="0.001107"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:27.723083" elapsed="0.001416"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:27.724540" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:27.724746" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:27.724792" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:27.718566" elapsed="0.006254"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.725300" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:27.725375" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:27.725019" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:27.725991" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:27.725683" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:27.725465" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:27.725447" 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-10T00:50:27.726316" 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-10T00:50:27.726487" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:27.726553" 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-10T00:50:27.715735" elapsed="0.010927">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:27.715488" elapsed="0.011245">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:27.715340" elapsed="0.011448">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:27.714899" elapsed="0.011997">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:27.727132" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:27.687622" elapsed="0.039639">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:28.754754" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:50:28.755081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:28.753915" elapsed="0.001227"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:28.753399" elapsed="0.001822"/>
</kw>
<msg time="2026-04-10T00:50:28.755267" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:28.745284" elapsed="0.010027"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:28.744817" elapsed="0.010630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.755914" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:28.755635" 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-10T00:50:28.760976" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:28.760570" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.761452" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:28.761164" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:28.761526" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:28.761684" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:28.760199" elapsed="0.001510"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:28.761872" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.762525" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:28.762191" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.763026" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:28.762728" elapsed="0.000325"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.763456" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:28.763201" 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-10T00:50:28.763898" 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-10T00:50:28.764148" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:28.764005" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:28.764365" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:28.764228" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:28.764580" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:28.764442" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:28.763986" elapsed="0.000667"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:28.763711" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:28.763529" elapsed="0.001174"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:28.764742" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:28.764958" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:28.765004" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:28.759461" elapsed="0.005566"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.765462" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:28.765538" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:28.765196" elapsed="0.000365"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:28.803734" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:28.765840" elapsed="0.037983">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:28.765629" elapsed="0.038294">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:28.765611" elapsed="0.038352">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:28.804164" 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-10T00:50:28.804345" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:28.804416" 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-10T00:50:28.756967" elapsed="0.047642">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:28.756721" elapsed="0.047962">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:28.756581" elapsed="0.048161">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:28.756187" elapsed="0.048653">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:28.805113" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:28.728070" elapsed="0.077164">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:29.829292" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:50:29.829594" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:29.828586" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:29.828106" elapsed="0.001630"/>
</kw>
<msg time="2026-04-10T00:50:29.829783" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:29.820009" elapsed="0.009819"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:29.819550" elapsed="0.010371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.830417" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:29.830123" 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-10T00:50:29.835814" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:29.835419" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.836327" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:29.836035" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:29.836401" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:29.836570" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:29.835044" 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-10T00:50:29.836747" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.837440" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:29.837080" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.837929" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:29.837666" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.838369" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:29.838102" 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-10T00:50:29.838792" 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-10T00:50:29.839071" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:29.838926" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:29.839290" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:29.839151" elapsed="0.000264"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:29.839586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:29.839441" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:29.838906" elapsed="0.000755"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:29.838626" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:29.838442" elapsed="0.001281"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:29.839763" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:29.839981" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:29.840029" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:29.834306" elapsed="0.005747"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.840545" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:29.840624" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:29.840225" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:29.841229" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:29.840952" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:29.840719" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:29.840700" 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-10T00:50:29.841548" 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-10T00:50:29.841719" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:29.841785" 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-10T00:50:29.831503" elapsed="0.010406">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:29.831258" elapsed="0.010723">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:29.831117" elapsed="0.010920">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:29.830693" elapsed="0.011434">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:29.842374" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:29.806116" elapsed="0.036375">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:30.870379" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:50:30.870702" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:30.869680" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:30.869215" elapsed="0.001668"/>
</kw>
<msg time="2026-04-10T00:50:30.870936" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:30.860328" 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-10T00:50:30.859730" elapsed="0.011329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.871511" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:30.871251" 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-10T00:50:30.876750" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:30.876342" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.877259" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:30.876963" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:30.877337" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:30.877500" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:30.875887" 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-10T00:50:30.877677" elapsed="0.000204"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.878403" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:30.878044" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.878970" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:30.878600" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.879450" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:30.879172" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:30.879955" 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-10T00:50:30.880275" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:30.880096" 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-10T00:50:30.880509" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:30.880360" 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-10T00:50:30.880777" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:30.880612" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:30.880074" elapsed="0.000801"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:30.879726" elapsed="0.001174"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:30.879528" elapsed="0.001397"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:30.880969" elapsed="0.000037"/>
</return>
<msg time="2026-04-10T00:50:30.881195" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:30.881244" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:30.875148" elapsed="0.006125"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.881987" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:30.882068" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:30.881454" elapsed="0.000639"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:30.882668" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:30.882382" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:30.882163" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:30.882144" elapsed="0.000745">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:30.883044" 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-10T00:50:30.883227" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:30.883325" 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-10T00:50:30.872570" elapsed="0.010870">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:30.872337" elapsed="0.011173">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:30.872196" elapsed="0.011379">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:30.871783" elapsed="0.011898">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:30.883997" elapsed="0.000031"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:30.843376" elapsed="0.040756">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:31.908305" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:50:31.908619" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:31.907637" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:31.907177" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:50:31.908808" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:31.899121" elapsed="0.009749"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:31.898681" elapsed="0.010266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.909441" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:31.909134" 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-10T00:50:31.914703" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:31.914315" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.915196" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:31.914903" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:31.915271" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:31.915428" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:31.913945" elapsed="0.001507"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:31.915602" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.916266" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:31.915931" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.916696" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:31.916446" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.917188" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:31.916941" 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-10T00:50:31.917652" 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-10T00:50:31.917920" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:31.917759" 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-10T00:50:31.918139" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:31.918001" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:31.918353" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:31.918214" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:31.917740" elapsed="0.000686"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:31.917485" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:31.917300" elapsed="0.001177"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:31.918617" elapsed="0.000045"/>
</return>
<msg time="2026-04-10T00:50:31.918863" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:31.918912" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:31.913199" elapsed="0.005737"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.919378" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:31.919455" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:31.919108" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:31.920071" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:31.919760" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:31.919546" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:31.919528" 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-10T00:50:31.920413" 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-10T00:50:31.920596" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:31.920677" 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-10T00:50:31.910506" elapsed="0.010295">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:31.910274" elapsed="0.010617">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:31.910132" elapsed="0.010820">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:31.909714" 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-10T00:50:31.921298" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:31.885070" elapsed="0.036345">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:32.946012" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:50:32.946318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:32.945349" elapsed="0.001031"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:32.944884" elapsed="0.001575"/>
</kw>
<msg time="2026-04-10T00:50:32.946506" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:32.936267" elapsed="0.010284"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:32.935685" elapsed="0.010939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.947079" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:32.946810" 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-10T00:50:32.952128" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:32.951717" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.952650" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:32.952312" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:32.952725" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:32.953004" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:32.951348" elapsed="0.001682"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:32.953183" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.953829" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:32.953495" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.954265" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:32.954026" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.954667" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:32.954435" elapsed="0.000257"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:32.955108" 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-10T00:50:32.955360" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:32.955216" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:32.955576" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:32.955439" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:32.955790" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:32.955652" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:32.955196" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:32.954937" elapsed="0.000966"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:32.954739" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:32.955970" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:32.956168" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:32.956213" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:32.950627" elapsed="0.005609"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.956872" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:32.956952" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:32.956403" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:32.957540" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:32.957261" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:32.957047" elapsed="0.000628">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:32.957028" 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-10T00:50:32.957881" 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-10T00:50:32.958056" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:32.958123" 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-10T00:50:32.948131" elapsed="0.010098">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:32.947900" elapsed="0.010399">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:32.947747" elapsed="0.010606">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:32.947358" elapsed="0.011087">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:32.958674" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:32.922191" elapsed="0.036598">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:33.985381" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:50:33.985692" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:33.984720" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:33.984245" elapsed="0.001591"/>
</kw>
<msg time="2026-04-10T00:50:33.985900" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:33.974670" elapsed="0.011276"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:33.974083" elapsed="0.011937"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.986467" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:33.986212" 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-10T00:50:33.991728" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:33.991343" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.992214" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:33.991928" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:33.992302" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:33.992463" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:33.990978" elapsed="0.001509"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:33.992637" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.993303" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:33.992964" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.993719" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:33.993484" elapsed="0.000260"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.994140" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:33.993903" 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-10T00:50:33.994551" 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-10T00:50:33.994801" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:33.994658" elapsed="0.000237"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:33.995093" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:33.994934" 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-10T00:50:33.995309" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:33.995172" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:33.994639" elapsed="0.000742"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:33.994389" elapsed="0.001016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:33.994210" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:33.995470" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:50:33.995668" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:33.995714" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:33.990254" elapsed="0.005483"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.996274" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:33.996382" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:33.996002" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:33.997084" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:33.996717" elapsed="0.000441">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:33.996476" elapsed="0.000750">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:33.996458" elapsed="0.000799">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:33.997410" 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-10T00:50:33.997581" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:33.997647" 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-10T00:50:33.987518" elapsed="0.010235">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:33.987287" elapsed="0.010536">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:33.987148" 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-10T00:50:33.986739" elapsed="0.011245">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:33.998213" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:33.959667" elapsed="0.038661">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:35.025469" elapsed="0.000315"/>
</kw>
<msg time="2026-04-10T00:50:35.025870" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:35.024734" elapsed="0.001203"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:35.024249" elapsed="0.001769"/>
</kw>
<msg time="2026-04-10T00:50:35.026064" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:35.016066" elapsed="0.010042"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:35.015616" elapsed="0.010566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.026655" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:35.026393" 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-10T00:50:35.031699" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:35.031313" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.032243" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:35.031945" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:35.032321" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:35.032481" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:35.030945" 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-10T00:50:35.032657" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.033362" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:35.033011" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.033926" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:35.033638" elapsed="0.000316"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.034362" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:35.034119" 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-10T00:50:35.034783" 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-10T00:50:35.035051" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:35.034907" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:35.035283" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:35.035131" 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-10T00:50:35.035511" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:35.035370" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:35.034887" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:35.034618" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:35.034437" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:35.035673" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:35.035922" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:35.035968" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:35.030215" elapsed="0.005777"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.036599" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:35.036678" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:35.036162" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:35.037297" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:35.037003" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:35.036771" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:35.036753" 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-10T00:50:35.037617" 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-10T00:50:35.037786" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:35.037868" 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-10T00:50:35.027717" elapsed="0.010281">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:35.027485" elapsed="0.010583">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:35.027345" elapsed="0.010778">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:35.026945" elapsed="0.011267">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:35.038443" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:34.999140" elapsed="0.039418">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:36.065189" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:50:36.065510" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:36.064512" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:36.064046" elapsed="0.001700"/>
</kw>
<msg time="2026-04-10T00:50:36.065794" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:36.053557" elapsed="0.012282"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:36.053147" elapsed="0.012794"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.066391" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:36.066134" 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-10T00:50:36.071793" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:36.071402" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.072299" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:36.072007" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:36.072377" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:36.072547" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:36.071015" 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-10T00:50:36.072752" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.073455" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:36.073110" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.073928" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:36.073639" elapsed="0.000323"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.074382" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:36.074135" 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-10T00:50:36.074832" 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-10T00:50:36.075126" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:36.074964" 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-10T00:50:36.075390" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:36.075210" 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-10T00:50:36.075608" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:36.075469" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:36.074943" elapsed="0.000737"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:36.074636" elapsed="0.001074"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:36.074456" elapsed="0.001304"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:36.075809" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:36.076037" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:36.076083" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:36.070274" elapsed="0.005832"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.076547" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:36.076624" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:36.076277" elapsed="0.000454"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:36.077731" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:36.077448" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:36.077224" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:36.077203" 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-10T00:50:36.078116" 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-10T00:50:36.078287" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:36.078353" 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-10T00:50:36.067533" elapsed="0.010927">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:36.067241" elapsed="0.011289">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:36.067095" elapsed="0.011491">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:36.066665" elapsed="0.012017">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:36.078943" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:36.039420" elapsed="0.039645">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:37.103807" elapsed="0.000266"/>
</kw>
<msg time="2026-04-10T00:50:37.104143" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:37.103166" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:37.102678" elapsed="0.001609"/>
</kw>
<msg time="2026-04-10T00:50:37.104332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:37.094303" elapsed="0.010073"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:37.093721" elapsed="0.010727"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.104910" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:37.104639" 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-10T00:50:37.110076" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:37.109673" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.110547" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:37.110261" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:37.110620" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:37.110810" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:37.109293" 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-10T00:50:37.111015" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.111676" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:37.111328" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.112105" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:37.111868" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.112503" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:37.112272" 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-10T00:50:37.112954" 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-10T00:50:37.113281" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:37.113137" 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-10T00:50:37.113499" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:37.113361" 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-10T00:50:37.113715" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:37.113575" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:37.113117" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:37.112755" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:37.112574" elapsed="0.001265"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:37.113895" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:37.114094" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:37.114141" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:37.108569" elapsed="0.005596"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.115951" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:37.116031" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:37.114332" elapsed="0.001724"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:37.116631" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:37.116348" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:37.116127" elapsed="0.000643">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:37.116108" 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-10T00:50:37.116968" 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-10T00:50:37.117144" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:37.117209" 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-10T00:50:37.106004" elapsed="0.011312">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:37.105749" elapsed="0.011634">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:37.105571" elapsed="0.011865">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:37.105181" elapsed="0.012343">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:37.117753" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:37.079979" elapsed="0.037903">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:38.145254" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:50:38.145567" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:38.144507" elapsed="0.001123"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:38.144048" elapsed="0.001661"/>
</kw>
<msg time="2026-04-10T00:50:38.145756" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:38.134644" elapsed="0.011157"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:38.134048" elapsed="0.011969"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.146501" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:38.146210" 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-10T00:50:38.152192" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:38.151780" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.152685" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:38.152380" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:38.152761" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:38.152939" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:38.151263" 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-10T00:50:38.153117" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.153792" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:38.153454" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.154273" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:38.154010" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.154715" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:38.154474" 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-10T00:50:38.155160" 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-10T00:50:38.155408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:38.155266" 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-10T00:50:38.155637" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:38.155499" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:38.155866" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:38.155713" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:38.155246" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:38.154993" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:38.154788" elapsed="0.001213"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:38.156041" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:38.156240" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:38.156286" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:38.150436" elapsed="0.005874"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.156773" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:38.156909" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:38.156489" elapsed="0.000449"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:38.157540" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:38.157258" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:38.157021" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:38.157001" 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-10T00:50:38.157907" 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-10T00:50:38.158090" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:38.158155" 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-10T00:50:38.147585" elapsed="0.010716">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:38.147347" elapsed="0.011044">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:38.147207" elapsed="0.011241">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:38.146795" elapsed="0.011755">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:38.158783" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:38.118739" elapsed="0.040186">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:39.187315" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:50:39.187631" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:39.186551" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:39.185959" elapsed="0.001819"/>
</kw>
<msg time="2026-04-10T00:50:39.187826" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:39.177419" elapsed="0.010474"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:39.176923" elapsed="0.011052"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.188504" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:39.188223" 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-10T00:50:39.194232" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:39.193647" elapsed="0.000625"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.194786" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:39.194474" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:39.194881" elapsed="0.000037"/>
</return>
<msg time="2026-04-10T00:50:39.195051" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:39.193229" 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-10T00:50:39.195262" elapsed="0.000198"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.196011" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:39.195629" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.196504" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:39.196200" elapsed="0.000332"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.196948" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:39.196684" 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-10T00:50:39.197440" 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-10T00:50:39.197703" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:39.197555" 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-10T00:50:39.197959" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:39.197784" 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-10T00:50:39.198278" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:39.198123" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:39.197536" elapsed="0.000857"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:39.197224" elapsed="0.001195"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:39.197026" elapsed="0.001419"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:39.198488" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:39.198708" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:39.198756" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:39.192450" elapsed="0.006332"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.199284" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:39.199406" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:39.198986" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:39.200301" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:39.199742" elapsed="0.000668">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:39.199514" elapsed="0.000972">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:39.199493" elapsed="0.001027">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:39.200679" 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-10T00:50:39.200874" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:39.200944" 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-10T00:50:39.189661" elapsed="0.011397">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:39.189422" elapsed="0.011707">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:39.189276" elapsed="0.011910">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:39.188796" elapsed="0.012496">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:39.201602" elapsed="0.000032"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:39.159751" elapsed="0.041998">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:40.229895" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:50:40.230221" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:40.229160" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:40.228657" elapsed="0.001750"/>
</kw>
<msg time="2026-04-10T00:50:40.230458" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:40.220463" elapsed="0.010046"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:40.220021" elapsed="0.010567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.231087" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:40.230789" 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-10T00:50:40.236504" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:40.236079" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.237050" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:40.236706" elapsed="0.000373"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:40.237131" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:50:40.237303" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:40.235581" 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-10T00:50:40.237521" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.238255" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:40.237879" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.238956" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:40.238454" elapsed="0.000532"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.239420" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:40.239143" 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-10T00:50:40.239909" 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-10T00:50:40.240190" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:40.240029" 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-10T00:50:40.240432" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:40.240279" 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-10T00:50:40.240687" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:40.240522" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:40.240008" elapsed="0.000765"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:40.239709" elapsed="0.001091"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:40.239503" elapsed="0.001326"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:40.240887" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:40.241109" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:40.241162" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:40.234802" elapsed="0.006387"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.241711" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:40.241797" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:40.241369" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:40.242441" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:40.242140" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:40.241914" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:40.241894" 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-10T00:50:40.242783" 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-10T00:50:40.242974" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:40.243045" 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-10T00:50:40.232218" elapsed="0.010939">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:40.231972" elapsed="0.011262">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:40.231808" elapsed="0.011481">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:40.231372" elapsed="0.012010">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:40.243670" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:40.202533" elapsed="0.041262">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:41.267887" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:50:41.268202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:41.267214" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:41.266720" elapsed="0.001627"/>
</kw>
<msg time="2026-04-10T00:50:41.268395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:41.258441" elapsed="0.009999"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:41.258017" elapsed="0.010516"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.269024" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:41.268726" elapsed="0.000346"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.274496" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:41.274102" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.275004" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:41.274692" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:41.275081" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:41.275247" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:41.273711" 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-10T00:50:41.275425" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.276119" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:41.275755" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.276546" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:41.276302" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.277024" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:41.276727" 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-10T00:50:41.277448" 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-10T00:50:41.277706" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:41.277555" 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-10T00:50:41.277947" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:41.277788" 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-10T00:50:41.278191" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:41.278028" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:41.277536" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:41.277281" elapsed="0.001010"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:41.277097" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:41.278424" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:41.278649" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:41.278705" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:41.272973" elapsed="0.005757"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.279197" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:41.279275" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:41.278921" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:41.279891" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:41.279585" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:41.279369" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:41.279350" 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-10T00:50:41.280215" 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-10T00:50:41.280387" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:41.280454" 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-10T00:50:41.270131" elapsed="0.010431">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:41.269870" elapsed="0.010762">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:41.269714" elapsed="0.010983">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:41.269306" 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-10T00:50:41.281055" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:41.244599" elapsed="0.036574">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:42.300724" elapsed="0.000256"/>
</kw>
<msg time="2026-04-10T00:50:42.301047" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:42.299988" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:42.299433" elapsed="0.001758"/>
</kw>
<msg time="2026-04-10T00:50:42.301238" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:42.291209" elapsed="0.010080"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:42.290708" elapsed="0.010657"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.301829" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:42.301567" 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-10T00:50:42.307162" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:42.306721" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.307649" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:42.307354" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:42.307723" elapsed="0.000036"/>
</return>
<msg time="2026-04-10T00:50:42.307992" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:42.306340" 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-10T00:50:42.308172" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.308897" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:42.308528" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.309329" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:42.309084" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.309741" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:42.309503" 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-10T00:50:42.310202" 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-10T00:50:42.310459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:42.310312" 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-10T00:50:42.310682" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:42.310541" 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-10T00:50:42.310918" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:42.310761" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:42.310293" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:42.310026" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:42.309817" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:42.311085" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:42.311293" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:42.311340" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:42.305490" elapsed="0.005874"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.311817" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:42.311914" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:42.311533" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:42.312762" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:42.312466" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:42.312009" elapsed="0.000909">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:42.311990" elapsed="0.000961">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:42.313105" 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-10T00:50:42.313278" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:42.313345" 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-10T00:50:42.302920" elapsed="0.010535">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:42.302671" elapsed="0.010854">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:42.302531" 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-10T00:50:42.302130" elapsed="0.011542">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:42.313925" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:42.281708" elapsed="0.032334">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:43.338428" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:50:43.338742" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:43.337746" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:43.337289" elapsed="0.001617"/>
</kw>
<msg time="2026-04-10T00:50:43.338953" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:43.329209" elapsed="0.009789"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:43.328767" elapsed="0.010305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.339532" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:43.339264" 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-10T00:50:43.344892" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:43.344481" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.345389" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:43.345100" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:43.345464" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:43.345623" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:43.344073" 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-10T00:50:43.345798" elapsed="0.000185"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.346476" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:43.346141" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.346914" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:43.346658" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.347323" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:43.347085" 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-10T00:50:43.347741" 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-10T00:50:43.348040" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:43.347864" 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-10T00:50:43.348274" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:43.348122" elapsed="0.000243"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:43.348613" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:43.348405" elapsed="0.000278"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:43.347830" elapsed="0.000885"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:43.347576" elapsed="0.001171"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:43.347396" elapsed="0.001386"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:43.348836" elapsed="0.000060"/>
</return>
<msg time="2026-04-10T00:50:43.349135" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:43.349214" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:43.343289" elapsed="0.005984"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.350008" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:43.350116" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:43.349605" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:43.350951" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:43.350547" elapsed="0.000502">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:43.350247" elapsed="0.000894">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:43.350222" 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-10T00:50:43.351398" 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-10T00:50:43.351635" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:43.351741" 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-10T00:50:43.340615" elapsed="0.011307">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:43.340378" elapsed="0.011707">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:43.340233" elapsed="0.011937">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:43.339810" elapsed="0.012487">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:43.352645" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:43.314962" elapsed="0.037844">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:44.377044" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:50:44.377346" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:44.376373" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:44.375887" elapsed="0.001598"/>
</kw>
<msg time="2026-04-10T00:50:44.377532" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:44.367659" elapsed="0.009918"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:44.367069" elapsed="0.010581"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.378109" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:44.377837" 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-10T00:50:44.383155" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:44.382750" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.383635" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:44.383339" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:44.383709" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:44.383881" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:44.382381" 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-10T00:50:44.384056" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.384698" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:44.384367" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.385215" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:44.384969" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.385626" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:44.385390" 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-10T00:50:44.386060" 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-10T00:50:44.386310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:44.386167" elapsed="0.000198"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:44.386529" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:44.386390" 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-10T00:50:44.386745" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:44.386607" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:44.386148" elapsed="0.000672"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:44.385895" elapsed="0.000962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:44.385700" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:44.386924" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:44.387127" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:44.387172" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:44.381653" elapsed="0.005542"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.387835" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:44.387932" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:44.387364" elapsed="0.000592"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:44.388533" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:44.388246" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:44.388027" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:44.388008" 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-10T00:50:44.388873" 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-10T00:50:44.389047" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:44.389112" 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-10T00:50:44.379154" elapsed="0.010066">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:44.378923" elapsed="0.010365">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:44.378767" elapsed="0.010575">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:44.378379" elapsed="0.011051">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:44.389659" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:44.353622" elapsed="0.036151">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:45.415305" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:50:45.415620" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:45.414597" elapsed="0.001087"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:45.414124" elapsed="0.001743"/>
</kw>
<msg time="2026-04-10T00:50:45.415917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:45.405229" elapsed="0.010734"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:45.404602" elapsed="0.011436"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.416505" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:45.416239" 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-10T00:50:45.421906" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:45.421478" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.422400" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:45.422096" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:45.422476" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:45.422634" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:45.421094" 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-10T00:50:45.422810" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.423525" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:45.423180" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.423961" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:45.423707" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.424384" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:45.424130" 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-10T00:50:45.424817" elapsed="0.000049"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:45.425119" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:45.424952" 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-10T00:50:45.425352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:45.425208" 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-10T00:50:45.425566" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:45.425429" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:45.424933" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:45.424635" elapsed="0.001039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:45.424457" elapsed="0.001242"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:45.425738" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:45.425954" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:45.426001" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:45.420353" elapsed="0.005671"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.426479" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:45.426565" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:45.426209" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:45.427193" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:45.426891" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:45.426659" elapsed="0.000723">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:45.426641" 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-10T00:50:45.427569" 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-10T00:50:45.427739" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:45.427804" 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-10T00:50:45.417596" elapsed="0.010349">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:45.417357" elapsed="0.010661">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:45.417216" elapsed="0.010857">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:45.416792" elapsed="0.011370">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:45.428408" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:45.390582" elapsed="0.037943">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:46.459801" elapsed="0.000258"/>
</kw>
<msg time="2026-04-10T00:50:46.460128" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:46.459153" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:46.458681" elapsed="0.001589"/>
</kw>
<msg time="2026-04-10T00:50:46.460317" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:46.448759" elapsed="0.011602"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:46.448160" elapsed="0.012274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.460887" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:46.460618" 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-10T00:50:46.465935" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:46.465529" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.466415" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:46.466121" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:46.466488" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:46.466669" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:46.465160" 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-10T00:50:46.466864" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.467515" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:46.467179" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.467951" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:46.467696" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.468356" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:46.468120" 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-10T00:50:46.468768" 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-10T00:50:46.469106" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:46.468960" 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-10T00:50:46.469330" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:46.469185" 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-10T00:50:46.469543" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:46.469405" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:46.468939" elapsed="0.000677"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:46.468606" elapsed="0.001035"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:46.468427" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:46.469706" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:50:46.469920" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:46.469967" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:46.464428" elapsed="0.005562"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.470426" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:46.470502" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:46.470158" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:46.471315" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:46.470839" elapsed="0.000548">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:46.470623" elapsed="0.000831">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:46.470605" 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-10T00:50:46.471636" 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-10T00:50:46.471806" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:46.471888" 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-10T00:50:46.461931" elapsed="0.010067">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:46.461687" elapsed="0.010380">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:46.461548" elapsed="0.010573">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:46.461157" elapsed="0.011052">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:46.472436" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:46.429353" elapsed="0.043197">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:47.497621" elapsed="0.000258"/>
</kw>
<msg time="2026-04-10T00:50:47.497955" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:47.496973" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:47.496504" elapsed="0.001608"/>
</kw>
<msg time="2026-04-10T00:50:47.498158" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:47.487713" 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-10T00:50:47.487156" elapsed="0.011200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.498803" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:47.498548" 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-10T00:50:47.504109" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:47.503669" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.504595" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:47.504296" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:47.504673" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:47.504832" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:47.503281" 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-10T00:50:47.505027" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.505745" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:47.505345" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.506406" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:47.505950" elapsed="0.000484"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.506824" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:47.506581" 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-10T00:50:47.507266" 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-10T00:50:47.507518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:47.507374" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:47.507765" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:47.507604" 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-10T00:50:47.508010" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:47.507862" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:47.507355" elapsed="0.000729"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:47.507100" elapsed="0.001009"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:47.506916" elapsed="0.001217"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:47.508172" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:47.508372" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:47.508418" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:47.502540" elapsed="0.005902"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.508898" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:47.508976" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:47.508611" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:47.509604" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:47.509299" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:47.509068" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:47.509051" 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-10T00:50:47.509947" 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-10T00:50:47.510135" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:47.510203" 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-10T00:50:47.499874" elapsed="0.010478">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:47.499628" elapsed="0.010795">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:47.499490" 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-10T00:50:47.499093" elapsed="0.011482">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:47.510820" elapsed="0.000039"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:47.473396" elapsed="0.037558">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:48.536313" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:50:48.536617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:48.535645" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:48.535179" elapsed="0.001580"/>
</kw>
<msg time="2026-04-10T00:50:48.536807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:48.527122" elapsed="0.009746"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:48.526688" elapsed="0.010257"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.537393" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:48.537136" 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-10T00:50:48.542733" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:48.542337" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.543226" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:48.542936" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:48.543301" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:48.543460" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:48.541962" elapsed="0.001524"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:48.543638" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.544308" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:48.543970" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.544738" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:48.544496" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.545166" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:48.544925" 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-10T00:50:48.545620" 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-10T00:50:48.545889" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:48.545729" 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-10T00:50:48.546108" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:48.545970" 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-10T00:50:48.546403" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:48.546262" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:48.545710" elapsed="0.000767"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:48.545424" elapsed="0.001077"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:48.545239" elapsed="0.001287"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:48.546565" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:48.546766" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:48.546812" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:48.541207" elapsed="0.005628"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.547421" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:48.547499" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:48.547023" elapsed="0.000501"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:48.548099" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:48.547806" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:48.547592" elapsed="0.000645">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:48.547574" 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-10T00:50:48.548421" 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-10T00:50:48.548620" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:48.548690" 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-10T00:50:48.538480" elapsed="0.010322">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:48.538247" elapsed="0.010642">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:48.538107" 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-10T00:50:48.537697" elapsed="0.011341">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:48.549276" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:48.511731" elapsed="0.037662">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:49.574858" elapsed="0.000237"/>
</kw>
<msg time="2026-04-10T00:50:49.575158" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:49.574202" elapsed="0.001018"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:49.573723" elapsed="0.001584"/>
</kw>
<msg time="2026-04-10T00:50:49.575354" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:49.565652" elapsed="0.009747"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:49.565238" elapsed="0.010234"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.575929" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:49.575658" 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-10T00:50:49.581040" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:49.580636" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.581585" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:49.581255" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:49.581658" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:49.581816" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:49.580182" 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-10T00:50:49.582009" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.582666" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:49.582322" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.583107" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:49.582864" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.583516" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:49.583280" 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-10T00:50:49.583950" 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-10T00:50:49.584202" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:49.584058" 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-10T00:50:49.584421" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:49.584281" 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-10T00:50:49.584644" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:49.584504" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:49.584039" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:49.583769" elapsed="0.000973"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:49.583589" elapsed="0.001178"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:49.584806" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:49.585022" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:49.585069" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:49.579454" elapsed="0.005655"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.585554" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:49.585633" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:49.585280" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:49.586422" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:49.585953" elapsed="0.000540">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:49.585724" elapsed="0.000835">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:49.585706" elapsed="0.000885">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:49.586744" 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-10T00:50:49.586935" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:49.587003" 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-10T00:50:49.576969" elapsed="0.010142">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:49.576726" elapsed="0.010454">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:49.576589" elapsed="0.010645">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:49.576198" elapsed="0.011127">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:49.587595" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:49.550281" elapsed="0.037431">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:50.611698" elapsed="0.000260"/>
</kw>
<msg time="2026-04-10T00:50:50.612026" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:50.611049" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:50.610577" elapsed="0.001592"/>
</kw>
<msg time="2026-04-10T00:50:50.612216" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:50.602522" elapsed="0.009738"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:50.602093" elapsed="0.010242"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.612812" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:50.612524" 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-10T00:50:50.617888" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:50.617486" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.618367" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:50.618076" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:50.618442" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:50.618600" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:50.617116" elapsed="0.001524"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:50.618793" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.619712" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:50.619132" elapsed="0.000608"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.620162" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:50.619914" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.620580" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:50.620339" 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-10T00:50:50.621050" 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-10T00:50:50.621303" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:50.621157" 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-10T00:50:50.621523" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:50.621383" 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-10T00:50:50.621743" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:50.621600" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:50.621138" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:50.620882" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:50.620677" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:50.621992" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:50.622198" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:50.622246" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:50.616366" elapsed="0.005904"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.622713" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:50.622791" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:50.622442" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:50.623397" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:50.623118" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:50.622902" elapsed="0.000629">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:50.622882" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:50.623716" 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-10T00:50:50.623906" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:50.623974" 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-10T00:50:50.613880" elapsed="0.010204">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:50.613634" elapsed="0.010520">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:50.613496" elapsed="0.010714">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:50.613103" elapsed="0.011198">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:50.624535" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:50.588500" elapsed="0.036168">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:51.649064" elapsed="0.000259"/>
</kw>
<msg time="2026-04-10T00:50:51.649393" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:51.648388" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:51.647859" elapsed="0.001679"/>
</kw>
<msg time="2026-04-10T00:50:51.649583" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:51.639407" elapsed="0.010221"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:51.638805" elapsed="0.010899"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.650175" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:51.649910" 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-10T00:50:51.655605" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:51.655195" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.656112" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:51.655795" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:51.656205" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:51.656451" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:51.654800" 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-10T00:50:51.656634" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.657330" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:51.656981" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.657778" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:51.657528" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.658231" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:51.657977" 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-10T00:50:51.658682" 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-10T00:50:51.658956" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:51.658792" 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-10T00:50:51.659182" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:51.659040" 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-10T00:50:51.659408" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:51.659262" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:51.658772" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:51.658509" elapsed="0.001003"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:51.658308" elapsed="0.001230"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:51.659579" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:51.659785" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:51.659833" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:51.654055" elapsed="0.005820"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.660341" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:51.660424" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:51.660049" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:51.661048" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:51.660745" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:51.660525" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:51.660506" 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-10T00:50:51.661371" 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-10T00:50:51.661553" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:51.661623" 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-10T00:50:51.651256" elapsed="0.010479">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:51.651020" elapsed="0.010787">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:51.650877" 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-10T00:50:51.650461" 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-10T00:50:51.662226" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:51.625545" elapsed="0.036802">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:52.686753" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:50:52.687086" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:52.686115" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:52.685642" elapsed="0.001588"/>
</kw>
<msg time="2026-04-10T00:50:52.687276" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:52.677641" elapsed="0.009680"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:52.677227" elapsed="0.010169"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.687867" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:52.687585" 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-10T00:50:52.692962" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:52.692559" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.693439" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:52.693150" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:52.693512" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:52.693670" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:52.692189" elapsed="0.001506"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:52.693858" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.694507" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:52.694173" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.694944" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:52.694689" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.695354" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:52.695116" 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-10T00:50:52.695783" 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-10T00:50:52.696050" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:52.695905" 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-10T00:50:52.696270" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:52.696131" 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-10T00:50:52.696486" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:52.696348" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:52.695886" elapsed="0.000674"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:52.695606" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:52.695427" elapsed="0.001181"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:52.696647" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:50:52.696859" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:52.696908" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:52.691427" elapsed="0.005504"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.697442" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:52.697521" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:52.697170" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:52.698302" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:52.698023" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:52.697784" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:52.697597" elapsed="0.000873">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:52.698622" 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-10T00:50:52.698793" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:52.698875" 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-10T00:50:52.688960" elapsed="0.010025">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:52.688716" elapsed="0.010339">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:52.688577" elapsed="0.010533">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:52.688140" elapsed="0.011060">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:52.699430" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:52.663250" elapsed="0.036294">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:53.725205" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:50:53.725523" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:53.724536" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:53.724073" elapsed="0.001597"/>
</kw>
<msg time="2026-04-10T00:50:53.725717" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:53.715871" elapsed="0.009891"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:53.715436" elapsed="0.010400"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.726309" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:53.726045" 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-10T00:50:53.731686" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:53.731282" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.732206" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:53.731903" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:53.732283" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:50:53.732444" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:53.730888" elapsed="0.001580"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:50:53.732620" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.733300" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:53.732955" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.733816" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:53.733565" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.734256" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:53.734010" 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-10T00:50:53.734695" 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-10T00:50:53.734972" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:53.734806" 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-10T00:50:53.735236" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:53.735055" 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-10T00:50:53.735461" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:53.735318" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:53.734786" elapsed="0.000750"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:53.734523" elapsed="0.001038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:53.734330" elapsed="0.001258"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:53.735629" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:53.735834" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:53.735900" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:53.730086" elapsed="0.005839"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.736380" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:53.736459" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:53.736100" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:53.737112" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:53.736777" elapsed="0.000409">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:53.736556" elapsed="0.000697">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:53.736536" elapsed="0.000750">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:53.737442" 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-10T00:50:53.737619" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:53.737686" 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-10T00:50:53.727413" elapsed="0.010383">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:53.727160" elapsed="0.010726">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:53.727019" elapsed="0.010927">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:53.726598" elapsed="0.011441">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:53.738276" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:53.700396" elapsed="0.037999">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:54.765881" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:50:54.766189" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:54.765222" elapsed="0.001031"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:54.764712" elapsed="0.001699"/>
</kw>
<msg time="2026-04-10T00:50:54.766458" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:54.755282" elapsed="0.011222"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:54.754687" elapsed="0.011893"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.767074" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:54.766791" 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-10T00:50:54.772291" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:54.771892" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.772773" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:54.772479" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:54.772862" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:50:54.773025" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:54.771484" 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-10T00:50:54.773205" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.773887" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:54.773526" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.774324" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:54.774075" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.774794" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:54.774513" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:54.775246" 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-10T00:50:54.775504" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:54.775357" 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-10T00:50:54.775725" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:54.775584" 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-10T00:50:54.775959" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:54.775802" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:54.775337" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:54.775074" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:54.774888" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:54.776124" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:54.776324" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:54.776370" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:54.770748" elapsed="0.005645"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.778498" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:54.778583" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:54.776564" elapsed="0.002045"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:54.779245" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:54.778950" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:54.778683" elapsed="0.000756">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:54.778662" elapsed="0.000812">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:54.779630" 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-10T00:50:54.779805" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:54.779890" 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-10T00:50:54.768211" elapsed="0.011789">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:54.767928" elapsed="0.012145">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:54.767741" elapsed="0.012392">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:54.767344" elapsed="0.012879">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:54.780467" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:54.739261" elapsed="0.041327">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:55.806651" elapsed="0.000269"/>
</kw>
<msg time="2026-04-10T00:50:55.806988" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:55.805952" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:55.805396" elapsed="0.001736"/>
</kw>
<msg time="2026-04-10T00:50:55.807179" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:55.796580" elapsed="0.010645"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:55.795937" elapsed="0.011363"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.807767" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:55.807506" 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-10T00:50:55.813206" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:55.812763" elapsed="0.000474"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.813693" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:55.813402" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:55.813767" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:50:55.813949" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:55.812382" 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-10T00:50:55.814127" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.814821" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:55.814468" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.815266" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:55.815023" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.815824" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:55.815584" 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-10T00:50:55.816287" 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-10T00:50:55.816618" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:55.816471" 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-10T00:50:55.816837" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:55.816698" 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-10T00:50:55.817073" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:55.816932" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:55.816450" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:55.816111" elapsed="0.001061"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:55.815916" elapsed="0.001282"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:55.817239" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:55.817448" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:55.817496" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:55.811628" elapsed="0.005892"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.817998" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:55.818076" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:55.817698" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:55.818685" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:55.818403" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:55.818169" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:55.818150" 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-10T00:50:55.819075" 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-10T00:50:55.819288" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:55.819372" 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-10T00:50:55.808859" elapsed="0.010628">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:55.808605" elapsed="0.010953">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:55.808466" elapsed="0.011148">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:55.808065" elapsed="0.011639">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:55.819967" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:55.781420" elapsed="0.038666">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:56.847260" elapsed="0.000247"/>
</kw>
<msg time="2026-04-10T00:50:56.847574" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:56.846584" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:56.846102" elapsed="0.001616"/>
</kw>
<msg time="2026-04-10T00:50:56.847765" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:56.837909" elapsed="0.009901"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:56.837411" elapsed="0.010546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.848420" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:56.848149" 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-10T00:50:56.853544" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:56.853148" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.854069" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:56.853745" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:56.854147" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:56.854307" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:56.852755" 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-10T00:50:56.854499" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.855185" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:56.854826" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.855612" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:56.855369" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.856045" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:56.855783" 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-10T00:50:56.856475" 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-10T00:50:56.856732" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:56.856586" 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-10T00:50:56.856970" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:56.856813" 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-10T00:50:56.857192" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:56.857050" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:56.856566" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:56.856307" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:56.856120" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:56.857357" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:56.857561" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:56.857608" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:56.852035" elapsed="0.005597"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.858136" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:56.858218" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:56.857838" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:56.859046" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:56.858544" elapsed="0.000584">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:56.858314" elapsed="0.000883">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:56.858295" elapsed="0.000936">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:56.859389" 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-10T00:50:56.859566" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:56.859635" 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-10T00:50:56.849493" elapsed="0.010292">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:56.849259" elapsed="0.010618">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:56.849117" 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-10T00:50:56.848698" 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-10T00:50:56.860269" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:56.820933" elapsed="0.039457">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:57.884289" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:50:57.884591" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:57.883632" elapsed="0.001020"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:57.883175" elapsed="0.001556"/>
</kw>
<msg time="2026-04-10T00:50:57.884778" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:57.875103" elapsed="0.009720"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:57.874676" elapsed="0.010238"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.885377" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:57.885101" 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-10T00:50:57.890489" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:57.890100" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.890985" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:57.890675" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:57.891061" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:50:57.891221" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:57.889710" 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-10T00:50:57.891405" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.892090" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:57.891726" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.892738" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:57.892277" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.893345" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:57.892939" elapsed="0.000442"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:57.893801" 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-10T00:50:57.894083" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:57.893932" 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-10T00:50:57.894308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:57.894165" elapsed="0.000269"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:57.894604" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:57.894460" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:57.893911" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:57.893627" elapsed="0.001079"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:57.893433" elapsed="0.001302"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:57.894774" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:50:57.894993" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:57.895040" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:57.888948" elapsed="0.006115"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.895517" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:57.895595" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:57.895236" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:57.896214" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:57.895927" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:57.895690" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:57.895672" 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-10T00:50:57.896541" 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-10T00:50:57.896715" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:57.896782" 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-10T00:50:57.886448" elapsed="0.010460">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:57.886202" elapsed="0.010777">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:57.886063" elapsed="0.010972">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:57.885650" elapsed="0.011476">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:57.897380" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:57.861216" elapsed="0.036283">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:58.925159" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:50:58.925475" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:58.924388" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:58.923884" elapsed="0.001735"/>
</kw>
<msg time="2026-04-10T00:50:58.925666" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:58.914708" elapsed="0.011003"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:58.913991" elapsed="0.011797"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.926294" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:58.926018" 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-10T00:50:58.931909" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:58.931479" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.932397" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:58.932101" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:58.932473" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:58.932633" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:58.931023" 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-10T00:50:58.932838" elapsed="0.000189"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.933540" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:58.933194" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.933990" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:58.933727" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.934406" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:58.934165" 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-10T00:50:58.934854" 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-10T00:50:58.935111" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:58.934965" 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-10T00:50:58.935331" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:58.935192" 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-10T00:50:58.935548" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:58.935409" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:58.934945" elapsed="0.000677"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:58.934669" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:58.934482" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:58.935711" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:50:58.935933" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:58.935980" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:58.930267" elapsed="0.005736"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.936450" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:58.936526" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:58.936173" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:58.937151" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:58.936865" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:58.936619" elapsed="0.000686">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:58.936601" 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-10T00:50:58.937497" 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-10T00:50:58.937668" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:58.937734" 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-10T00:50:58.927372" elapsed="0.010495">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:58.927136" elapsed="0.010810">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:58.926993" 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-10T00:50:58.926575" elapsed="0.011553">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:58.938436" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:58.898338" elapsed="0.040218">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:50:59.966051" elapsed="0.000243"/>
</kw>
<msg time="2026-04-10T00:50:59.966363" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:59.965396" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:59.964934" elapsed="0.001573"/>
</kw>
<msg time="2026-04-10T00:50:59.966554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:50:59.956781" elapsed="0.009817"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:50:59.956336" elapsed="0.010338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.967136" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:50:59.966880" 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-10T00:50:59.972396" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:59.971918" elapsed="0.000507"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.972895" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:59.972587" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:50:59.972972" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:50:59.973136" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:50:59.971504" 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-10T00:50:59.973312" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.973985" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:50:59.973634" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.974405" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:59.974165" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.974811" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:50:59.974576" 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-10T00:50:59.975255" 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-10T00:50:59.975509" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:59.975365" 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-10T00:50:59.975727" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:59.975589" 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-10T00:50:59.975959" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:50:59.975804" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:50:59.975344" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:50:59.975089" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:59.974901" elapsed="0.001182"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:50:59.976229" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:50:59.976452" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:50:59.976499" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:50:59.970733" elapsed="0.005790"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.976996" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:50:59.977076" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:50:59.976696" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:50:59.977917" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:50:59.977608" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:50:59.977172" elapsed="0.000889">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:50:59.977152" 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-10T00:50:59.978246" 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-10T00:50:59.978418" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:50:59.978483" 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-10T00:50:59.968196" elapsed="0.010398">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:50:59.967960" elapsed="0.010704">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:50:59.967801" elapsed="0.010918">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:50:59.967407" elapsed="0.011403">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:50:59.979063" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:59.939415" elapsed="0.039766">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:01.003175" elapsed="0.000241"/>
</kw>
<msg time="2026-04-10T00:51:01.003483" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:01.002520" elapsed="0.001025"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:01.002060" elapsed="0.001562"/>
</kw>
<msg time="2026-04-10T00:51:01.003667" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:00.994007" elapsed="0.009704"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:00.993577" elapsed="0.010208"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.004268" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:01.004006" 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-10T00:51:01.009482" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:01.009092" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.009994" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:01.009670" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:01.010071" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:01.010308" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:01.008708" 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-10T00:51:01.010490" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.011166" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:01.010809" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.011598" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:01.011352" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.012072" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:01.011774" 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-10T00:51:01.012494" 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-10T00:51:01.012763" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:01.012616" 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-10T00:51:01.013027" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:01.012863" 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-10T00:51:01.013252" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:01.013110" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:01.012595" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:01.012328" elapsed="0.001022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:01.012147" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:01.013415" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:01.013625" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:01.013672" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:01.007995" elapsed="0.005701"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.014165" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:01.014244" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:01.013884" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:01.014862" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:01.014560" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:01.014338" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:01.014319" 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-10T00:51:01.015182" 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-10T00:51:01.015353" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:01.015419" 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-10T00:51:01.005326" elapsed="0.010200">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:01.005095" elapsed="0.010502">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:01.004945" elapsed="0.010708">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:01.004539" elapsed="0.011206">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:01.016027" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:00.980202" elapsed="0.035951">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:02.044211" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:51:02.044527" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:02.043525" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:02.042990" elapsed="0.001682"/>
</kw>
<msg time="2026-04-10T00:51:02.044720" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:02.034767" elapsed="0.010000"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:02.034354" elapsed="0.010505"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.045318" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:02.045057" 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-10T00:51:02.050416" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:02.050025" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.050913" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:02.050604" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:02.050989" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:02.051149" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:02.049630" 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-10T00:51:02.051358" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.052041" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:02.051681" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.052500" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:02.052248" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.052933" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:02.052676" 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-10T00:51:02.053351" 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-10T00:51:02.053601" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:02.053460" elapsed="0.000196"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:02.053818" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:02.053681" 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-10T00:51:02.054055" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:02.053915" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:02.053440" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:02.053186" elapsed="0.000965"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:02.053006" elapsed="0.001170"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:02.054215" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:02.054413" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:02.054458" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:02.048906" elapsed="0.005574"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.055203" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:02.055306" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:02.054732" elapsed="0.000600"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:02.055992" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:02.055692" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:02.055462" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:02.055440" 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-10T00:51:02.056315" 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-10T00:51:02.056485" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:02.056551" 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-10T00:51:02.046379" elapsed="0.010280">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:02.046148" elapsed="0.010582">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:02.046006" elapsed="0.010779">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:02.045591" 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-10T00:51:02.057127" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:02.017052" elapsed="0.040190">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:03.082040" elapsed="0.000234"/>
</kw>
<msg time="2026-04-10T00:51:03.082340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:03.081378" elapsed="0.001026"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:03.080915" elapsed="0.001568"/>
</kw>
<msg time="2026-04-10T00:51:03.082527" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:03.072911" elapsed="0.009660"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:03.072479" elapsed="0.010164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.083115" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:03.082832" 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-10T00:51:03.088372" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:03.087984" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.088857" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:03.088558" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:03.088932" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:03.089090" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:03.087593" 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-10T00:51:03.089265" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.089925" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:03.089576" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.090433" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:03.090191" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.090882" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:03.090607" 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-10T00:51:03.091327" 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-10T00:51:03.091578" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:03.091434" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:03.091796" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:03.091658" 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-10T00:51:03.092031" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:03.091890" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:03.091415" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:03.091160" elapsed="0.000969"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:03.090968" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:03.092194" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:03.092393" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:03.092440" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:03.086828" elapsed="0.005636"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.092918" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:03.092996" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:03.092634" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:03.093576" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:03.093302" elapsed="0.000344">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:03.093088" elapsed="0.000622">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:03.093070" elapsed="0.000671">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:03.093907" 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-10T00:51:03.094079" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:03.094144" 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-10T00:51:03.084173" elapsed="0.010078">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:03.083936" elapsed="0.010384">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:03.083779" elapsed="0.010595">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:03.083384" elapsed="0.011080">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:03.094694" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:03.058180" elapsed="0.036630">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:04.122547" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:51:04.122888" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:04.121859" elapsed="0.001098"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:04.121304" elapsed="0.001809"/>
</kw>
<msg time="2026-04-10T00:51:04.123159" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:04.112150" elapsed="0.011054"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:04.111605" elapsed="0.011672"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.123721" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:04.123464" 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-10T00:51:04.128748" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:04.128357" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.129239" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:04.128949" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:04.129314" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:04.129473" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:04.127987" elapsed="0.001511"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:04.129648" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.130311" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:04.129976" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.130741" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:04.130502" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.131162" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:04.130927" 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-10T00:51:04.131578" 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-10T00:51:04.131830" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:04.131686" 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-10T00:51:04.132065" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:04.131925" 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-10T00:51:04.132278" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:04.132140" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:04.131666" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:04.131413" elapsed="0.000961"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:04.131234" elapsed="0.001167"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:04.132440" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:51:04.132637" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:04.132683" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:04.127260" elapsed="0.005446"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.133160" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:04.133238" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:04.132887" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:04.134030" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:04.133544" elapsed="0.000564">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:04.133330" elapsed="0.000888">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:04.133311" 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-10T00:51:04.134437" 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-10T00:51:04.134610" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:04.134675" 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-10T00:51:04.124775" elapsed="0.010008">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:04.124546" elapsed="0.010320">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:04.124403" elapsed="0.010521">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:04.124005" elapsed="0.011008">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:04.135240" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:04.095702" elapsed="0.039652">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:05.163781" elapsed="0.000267"/>
</kw>
<msg time="2026-04-10T00:51:05.164117" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:05.163111" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:05.162616" elapsed="0.001652"/>
</kw>
<msg time="2026-04-10T00:51:05.164315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:05.154294" elapsed="0.010068"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:05.153806" elapsed="0.010630"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.164916" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:05.164633" 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-10T00:51:05.170184" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:05.169724" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.170684" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:05.170379" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:05.170762" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:05.170951" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:05.169344" elapsed="0.001639"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:05.171229" elapsed="0.000225"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.172196" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:05.171679" elapsed="0.000555"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.173111" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:05.172457" elapsed="0.000692"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.173824" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:05.173362" elapsed="0.000521"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:05.174495" 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-10T00:51:05.174986" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:05.174741" elapsed="0.000339"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:05.175270" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:05.175121" 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-10T00:51:05.175490" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:05.175348" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:05.174710" elapsed="0.000856"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:05.174256" elapsed="0.001335"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:05.173995" elapsed="0.001622"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:05.175657" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:05.175880" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:05.175931" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:05.168587" elapsed="0.007369"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.176415" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:05.176494" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:05.176130" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:05.177127" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:05.176812" elapsed="0.000394">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:05.176589" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:05.176570" 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-10T00:51:05.177467" 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-10T00:51:05.177642" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:05.177709" 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-10T00:51:05.166048" elapsed="0.011775">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:05.165757" elapsed="0.012175">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:05.165612" elapsed="0.012388">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:05.165203" elapsed="0.012893">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:05.178337" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:05.136422" elapsed="0.042039">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:06.202763" elapsed="0.000278"/>
</kw>
<msg time="2026-04-10T00:51:06.203111" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:06.202082" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:06.201601" elapsed="0.001662"/>
</kw>
<msg time="2026-04-10T00:51:06.203309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:06.193062" elapsed="0.010293"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:06.192473" elapsed="0.011060"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.204013" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:06.203729" 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-10T00:51:06.209507" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:06.209060" elapsed="0.000477"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.210038" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:06.209701" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:06.210117" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:06.210280" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:06.208660" 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-10T00:51:06.210459" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.211167" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:06.210797" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.211595" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:06.211351" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.212028" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:06.211768" 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-10T00:51:06.212452" 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-10T00:51:06.212708" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:06.212563" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:06.212947" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:06.212788" 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-10T00:51:06.213169" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:06.213027" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:06.212542" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:06.212284" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:06.212102" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:06.213333" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:06.213559" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:06.213607" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:06.207899" elapsed="0.005731"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.214106" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:06.214184" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:06.213808" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:06.214792" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:06.214493" elapsed="0.000391">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:06.214277" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:06.214258" 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-10T00:51:06.215138" 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-10T00:51:06.215312" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:06.215380" 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-10T00:51:06.205099" elapsed="0.010430">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:06.204854" elapsed="0.010747">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:06.204695" 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-10T00:51:06.204293" 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-10T00:51:06.216008" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:06.179345" elapsed="0.036782">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:07.241687" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:51:07.242003" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:07.241030" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:07.240539" elapsed="0.001609"/>
</kw>
<msg time="2026-04-10T00:51:07.242195" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:07.231823" 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-10T00:51:07.231257" elapsed="0.011060"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.242765" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:07.242505" 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-10T00:51:07.247839" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:07.247448" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.248339" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:07.248044" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:07.248415" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:07.248575" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:07.247077" 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-10T00:51:07.248752" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.249454" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:07.249111" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.249894" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:07.249639" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.250317" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:07.250068" 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-10T00:51:07.250736" 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-10T00:51:07.251007" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:07.250858" 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-10T00:51:07.251226" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:07.251088" elapsed="0.000263"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:07.251519" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:07.251376" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:07.250824" elapsed="0.000769"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:07.250571" elapsed="0.001047"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:07.250390" elapsed="0.001254"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:07.251683" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:07.251901" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:07.251948" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:07.246345" elapsed="0.005627"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.252416" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:07.252494" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:07.252142" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:07.253329" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:07.252804" elapsed="0.000603">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:07.252587" elapsed="0.000889">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:07.252569" 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-10T00:51:07.253708" 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-10T00:51:07.253901" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:07.253969" 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-10T00:51:07.243814" elapsed="0.010265">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:07.243585" elapsed="0.010561">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:07.243446" elapsed="0.010754">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:07.243052" elapsed="0.011237">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:07.254520" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:07.216939" elapsed="0.037696">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:08.283658" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:51:08.283991" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:08.282962" elapsed="0.001098"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:08.282310" elapsed="0.001835"/>
</kw>
<msg time="2026-04-10T00:51:08.284191" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:08.272400" elapsed="0.011837"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:08.271702" elapsed="0.012612"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.284785" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:08.284527" 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-10T00:51:08.289999" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:08.289589" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.290489" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:08.290194" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:08.290566" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:08.290726" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:08.289123" 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-10T00:51:08.290919" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.291791" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:08.291239" elapsed="0.000581"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.292245" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:08.291996" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.292681" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:08.292420" 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-10T00:51:08.293127" 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-10T00:51:08.293383" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:08.293236" 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-10T00:51:08.293600" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:08.293462" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:08.293816" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:08.293676" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:08.293217" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:08.292958" elapsed="0.000972"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:08.292757" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:08.293993" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:08.294195" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:08.294242" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:08.288356" elapsed="0.005910"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.294705" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:08.294783" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:08.294434" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:08.295386" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:08.295106" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:08.294890" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:08.294871" 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-10T00:51:08.295707" 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-10T00:51:08.295892" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:08.295960" 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-10T00:51:08.285877" elapsed="0.010190">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:08.285629" elapsed="0.010505">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:08.285489" elapsed="0.010699">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:08.285088" elapsed="0.011191">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:08.296574" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:08.255445" elapsed="0.041246">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:09.324827" elapsed="0.000262"/>
</kw>
<msg time="2026-04-10T00:51:09.325157" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:09.324152" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:09.323589" elapsed="0.001713"/>
</kw>
<msg time="2026-04-10T00:51:09.325350" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:09.315504" elapsed="0.009890"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:09.315084" elapsed="0.010385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.325941" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:09.325662" 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-10T00:51:09.331346" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:09.330946" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.331834" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:09.331539" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:09.331925" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:09.332126" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:09.330555" elapsed="0.001598"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:09.332309" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.332993" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:09.332631" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.333562" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:09.333220" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.334165" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:09.333805" elapsed="0.000397"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:09.334761" 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-10T00:51:09.335138" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:09.334932" 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-10T00:51:09.335447" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:09.335252" elapsed="0.000271"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:09.335753" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:09.335556" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:09.334904" elapsed="0.000973"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:09.334524" elapsed="0.001387"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:09.334268" elapsed="0.001677"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:09.336103" elapsed="0.000043"/>
</return>
<msg time="2026-04-10T00:51:09.336393" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:09.336457" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:09.329809" elapsed="0.006681"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.337133" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:09.337242" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:09.336730" elapsed="0.000546"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:09.338152" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:09.337721" elapsed="0.000526">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:09.337374" elapsed="0.000964">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:09.337347" 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-10T00:51:09.338599" 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-10T00:51:09.338843" elapsed="0.000050"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:09.338958" 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-10T00:51:09.327014" elapsed="0.012096">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:09.326762" elapsed="0.012447">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:09.326621" elapsed="0.012665">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:09.326224" elapsed="0.013189">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:09.339739" elapsed="0.000034"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:09.297602" elapsed="0.042322">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:10.367045" elapsed="0.000250"/>
</kw>
<msg time="2026-04-10T00:51:10.367363" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:10.366374" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:10.365909" elapsed="0.001645"/>
</kw>
<msg time="2026-04-10T00:51:10.367605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:10.356712" elapsed="0.010941"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:10.356134" elapsed="0.011595"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.368194" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:10.367935" 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-10T00:51:10.373324" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:10.372922" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.373805" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:10.373513" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:10.373897" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:10.374140" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:10.372532" 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-10T00:51:10.374320" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.375000" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:10.374641" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.375429" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:10.375185" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.375878" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:10.375618" 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-10T00:51:10.376308" 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-10T00:51:10.376562" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:10.376417" 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-10T00:51:10.376781" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:10.376643" 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-10T00:51:10.377021" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:10.376880" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:10.376397" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:10.376139" elapsed="0.000980"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:10.375955" elapsed="0.001191"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:10.377186" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:51:10.377385" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:10.377431" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:10.371792" elapsed="0.005661"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.377909" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:10.377986" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:10.377622" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:10.378762" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:10.378477" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:10.378251" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:10.378061" 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-10T00:51:10.379108" 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-10T00:51:10.379290" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:10.379359" 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-10T00:51:10.369273" elapsed="0.010196">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:10.369040" elapsed="0.010522">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:10.368883" elapsed="0.010738">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:10.368465" elapsed="0.011247">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:10.379963" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:10.340911" elapsed="0.039168">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:11.404613" elapsed="0.000272"/>
</kw>
<msg time="2026-04-10T00:51:11.404954" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:11.403935" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:11.403446" elapsed="0.001655"/>
</kw>
<msg time="2026-04-10T00:51:11.405149" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:11.395031" elapsed="0.010162"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:11.394401" elapsed="0.010868"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.405725" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:11.405463" 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-10T00:51:11.411120" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:11.410649" elapsed="0.000503"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.411616" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:11.411317" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:11.411694" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:11.411873" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:11.410272" elapsed="0.001628"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:11.412054" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.412724" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:11.412375" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.413201" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:11.412929" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.413636" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:11.413386" 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-10T00:51:11.414082" 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-10T00:51:11.414339" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:11.414193" 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-10T00:51:11.414573" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:11.414421" 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-10T00:51:11.414869" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:11.414691" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:11.414173" elapsed="0.000775"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:11.413913" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:11.413711" elapsed="0.001286"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:11.415056" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:11.415262" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:11.415310" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:11.409521" elapsed="0.005813"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.415862" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:11.415943" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:11.415574" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:11.416532" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:11.416254" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:11.416038" elapsed="0.000635">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:11.416019" 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-10T00:51:11.416988" 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-10T00:51:11.417174" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:11.417242" 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-10T00:51:11.406805" elapsed="0.010547">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:11.406566" elapsed="0.010856">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:11.406423" elapsed="0.011055">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:11.406021" elapsed="0.011548">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:11.417855" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:11.381009" elapsed="0.036967">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:12.445598" elapsed="0.000242"/>
</kw>
<msg time="2026-04-10T00:51:12.445926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:12.444949" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:12.444471" elapsed="0.001602"/>
</kw>
<msg time="2026-04-10T00:51:12.446120" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:12.435206" elapsed="0.010958"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:12.434610" elapsed="0.011628"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.446722" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:12.446439" 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-10T00:51:12.451883" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:12.451471" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.452362" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:12.452071" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:12.452436" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:12.452595" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:12.451076" 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-10T00:51:12.452768" elapsed="0.000178"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.453439" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:12.453104" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.453978" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:12.453712" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.454402" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:12.454156" 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-10T00:51:12.454885" 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-10T00:51:12.455146" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:12.454998" 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-10T00:51:12.455374" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:12.455230" 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-10T00:51:12.455598" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:12.455455" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:12.454978" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:12.454701" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:12.454491" elapsed="0.001233"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:12.455764" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:12.455981" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:12.456029" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:12.450300" elapsed="0.005754"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.458154" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:12.458238" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:12.456224" elapsed="0.002039"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:12.458905" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:12.458583" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:12.458336" elapsed="0.000714">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:12.458316" elapsed="0.000767">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:12.459239" 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-10T00:51:12.459432" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:12.459503" 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-10T00:51:12.447780" elapsed="0.011833">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:12.447550" elapsed="0.012134">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:12.447409" elapsed="0.012331">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:12.447013" elapsed="0.012818">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:12.460084" elapsed="0.000032"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:12.418941" elapsed="0.041271">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:13.488477" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:51:13.488790" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:13.487762" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:13.487218" elapsed="0.001833"/>
</kw>
<msg time="2026-04-10T00:51:13.489099" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:13.476968" elapsed="0.012179"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:13.476244" elapsed="0.012979"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.489692" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:13.489431" 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-10T00:51:13.495198" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:13.494741" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.495695" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:13.495395" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:13.495773" elapsed="0.000035"/>
</return>
<msg time="2026-04-10T00:51:13.495959" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:13.494357" 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-10T00:51:13.496138" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.496807" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:13.496463" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.497249" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:13.497006" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.497663" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:13.497422" 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-10T00:51:13.498146" 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-10T00:51:13.498402" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:13.498256" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:13.498619" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:13.498481" 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-10T00:51:13.498839" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:13.498698" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:13.498237" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:13.497956" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:13.497741" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:13.499020" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:13.499226" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:13.499273" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:13.493543" elapsed="0.005755"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.499754" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:13.499833" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:13.499469" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:13.500457" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:13.500169" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:13.499946" elapsed="0.000718">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:13.499927" 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-10T00:51:13.500870" 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-10T00:51:13.501047" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:13.501116" 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-10T00:51:13.490810" elapsed="0.010416">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:13.490570" elapsed="0.010727">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:13.490425" 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-10T00:51:13.489992" elapsed="0.011455">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:13.501687" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:13.461087" elapsed="0.040718">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:14.526761" elapsed="0.000265"/>
</kw>
<msg time="2026-04-10T00:51:14.527092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:14.526101" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:14.525587" elapsed="0.001653"/>
</kw>
<msg time="2026-04-10T00:51:14.527286" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:14.517195" elapsed="0.010137"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:14.516585" elapsed="0.010823"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.527879" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:14.527601" 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-10T00:51:14.533095" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:14.532641" elapsed="0.000484"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.533597" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:14.533290" elapsed="0.000359"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:14.533704" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:14.533883" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:14.532257" 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-10T00:51:14.534064" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.534752" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:14.534388" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.535206" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:14.534957" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.535628" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:14.535382" 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-10T00:51:14.536074" 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-10T00:51:14.536405" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:14.536257" 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-10T00:51:14.536630" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:14.536486" 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-10T00:51:14.536863" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:14.536707" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:14.536236" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:14.535906" elapsed="0.001063"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:14.535702" elapsed="0.001293"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:14.537036" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:14.537239" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:14.537326" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:14.531507" elapsed="0.005845"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.537824" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:14.537921" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:14.537525" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:14.538722" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:14.538235" elapsed="0.000561">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:14.538014" elapsed="0.000866">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:14.537995" 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-10T00:51:14.539071" 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-10T00:51:14.539247" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:14.539316" 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-10T00:51:14.528958" elapsed="0.010468">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:14.528705" elapsed="0.010791">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:14.528562" elapsed="0.010989">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:14.528160" elapsed="0.011483">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:14.539893" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:14.502673" elapsed="0.037340">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:15.569817" elapsed="0.000275"/>
</kw>
<msg time="2026-04-10T00:51:15.570163" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:15.569052" elapsed="0.001178"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:15.568498" elapsed="0.001815"/>
</kw>
<msg time="2026-04-10T00:51:15.570360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:15.557219" elapsed="0.013185"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:15.556597" elapsed="0.014001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.571075" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:15.570796" 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-10T00:51:15.576262" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:15.575865" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.576742" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:15.576451" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:15.576819" elapsed="0.000051"/>
</return>
<msg time="2026-04-10T00:51:15.577004" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:15.575472" 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-10T00:51:15.577231" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.577910" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:15.577556" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.578547" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:15.578093" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.578982" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:15.578723" 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-10T00:51:15.579407" 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-10T00:51:15.579662" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:15.579516" 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-10T00:51:15.579899" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:15.579743" 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-10T00:51:15.580118" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:15.579977" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:15.579496" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:15.579241" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:15.579057" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:15.580283" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:15.580503" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:15.580550" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:15.574679" elapsed="0.005895"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.581049" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:15.581143" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:15.580748" elapsed="0.000422"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:15.581740" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:15.581457" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:15.581240" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:15.581221" 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-10T00:51:15.582083" 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-10T00:51:15.582253" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:15.582318" 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-10T00:51:15.572151" elapsed="0.010319">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:15.571912" elapsed="0.010631">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:15.571752" 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-10T00:51:15.571353" elapsed="0.011336">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:15.582938" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:15.540815" elapsed="0.042241">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:16.607663" elapsed="0.000255"/>
</kw>
<msg time="2026-04-10T00:51:16.607986" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:16.607011" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:16.606538" elapsed="0.001591"/>
</kw>
<msg time="2026-04-10T00:51:16.608175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:16.598562" elapsed="0.009657"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:16.598142" elapsed="0.010152"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.608772" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:16.608488" 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-10T00:51:16.614179" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:16.613770" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.614656" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:16.614366" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:16.614731" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:16.614907" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:16.613393" 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-10T00:51:16.615087" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.615749" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:16.615409" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.616191" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:16.615948" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.616602" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:16.616364" 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-10T00:51:16.617055" 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-10T00:51:16.617307" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:16.617163" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:16.617527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:16.617387" elapsed="0.000264"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:16.617822" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:16.617677" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:16.617144" elapsed="0.000769"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:16.616888" elapsed="0.001050"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:16.616691" elapsed="0.001272"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:16.618003" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:16.618205" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:16.618251" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:16.612633" elapsed="0.005642"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.618716" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:16.618793" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:16.618445" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:16.619393" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:16.619117" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:16.618902" elapsed="0.000627">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:16.618882" elapsed="0.000678">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:16.619710" 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-10T00:51:16.619896" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:16.619964" 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-10T00:51:16.609827" elapsed="0.010246">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:16.609593" elapsed="0.010549">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:16.609453" elapsed="0.010744">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:16.609059" elapsed="0.011228">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:16.620518" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:16.584036" elapsed="0.036598">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:17.646308" elapsed="0.000239"/>
</kw>
<msg time="2026-04-10T00:51:17.646615" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:17.645647" elapsed="0.001028"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:17.645182" elapsed="0.001572"/>
</kw>
<msg time="2026-04-10T00:51:17.646800" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:17.637071" elapsed="0.009788"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:17.636636" elapsed="0.010300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.647380" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:17.647126" 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-10T00:51:17.652519" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:17.652097" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.653015" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:17.652707" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:17.653091" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:17.653251" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:17.651637" elapsed="0.001639"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:17.653427" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.654100" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:17.653742" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.654527" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:17.654284" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.654957" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:17.654700" 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-10T00:51:17.655382" 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-10T00:51:17.655634" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:17.655490" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:17.655866" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:17.655714" 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-10T00:51:17.656084" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:17.655945" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:17.655471" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:17.655217" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:17.655033" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:17.656263" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:17.656463" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:17.656511" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:17.650921" elapsed="0.005613"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.656989" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:17.657068" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:17.656703" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:17.657867" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:17.657564" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:17.657161" elapsed="0.000844">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:17.657143" 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-10T00:51:17.658190" 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-10T00:51:17.658361" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:17.658428" 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-10T00:51:17.648448" elapsed="0.010088">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:17.648216" elapsed="0.010390">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:17.648056" elapsed="0.010606">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:17.647648" elapsed="0.011106">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:17.659045" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:17.621526" elapsed="0.037639">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:18.683181" elapsed="0.000246"/>
</kw>
<msg time="2026-04-10T00:51:18.683517" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:18.682512" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:18.682048" elapsed="0.001615"/>
</kw>
<msg time="2026-04-10T00:51:18.683732" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:18.673896" elapsed="0.009889"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:18.673427" elapsed="0.010452"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.684329" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:18.684071" 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-10T00:51:18.689603" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:18.689213" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.690124" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:18.689789" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:18.690202" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:18.690362" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:18.688825" 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-10T00:51:18.690545" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.691232" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:18.690879" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.691723" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:18.691421" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.692177" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:18.691919" 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-10T00:51:18.692605" 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-10T00:51:18.692881" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:18.692715" 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-10T00:51:18.693140" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:18.692965" elapsed="0.000235"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:18.693367" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:18.693223" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:18.692696" elapsed="0.000747"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:18.692437" elapsed="0.001033"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:18.692252" elapsed="0.001245"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:18.693603" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:18.693814" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:18.693879" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:18.688067" elapsed="0.005839"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.694395" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:18.694495" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:18.694085" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:18.695218" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:18.694875" elapsed="0.000418">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:18.694615" elapsed="0.000747">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:18.694587" elapsed="0.000810">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:18.695594" 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-10T00:51:18.695799" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:18.695883" 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-10T00:51:18.685399" elapsed="0.010594">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:18.685168" elapsed="0.010895">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:18.685029" elapsed="0.011110">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:18.684606" elapsed="0.011656">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:18.696500" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:18.660098" elapsed="0.036520">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:19.722556" elapsed="0.000238"/>
</kw>
<msg time="2026-04-10T00:51:19.722886" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:19.721914" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:19.721437" elapsed="0.001593"/>
</kw>
<msg time="2026-04-10T00:51:19.723076" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:19.712510" elapsed="0.010611"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:19.711950" elapsed="0.011246"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.723700" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:19.723408" 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-10T00:51:19.729096" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:19.728664" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.729606" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:19.729283" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:19.729681" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:19.729943" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:19.728202" elapsed="0.001766"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:19.730122" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.730788" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:19.730441" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.731250" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:19.730990" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.731656" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:19.731421" 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-10T00:51:19.732089" 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-10T00:51:19.732340" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:19.732197" 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-10T00:51:19.732555" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:19.732419" elapsed="0.000189"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:19.732767" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:19.732631" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:19.732177" elapsed="0.000663"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:19.731924" elapsed="0.000956"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:19.731727" elapsed="0.001179"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:19.732946" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:19.733145" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:19.733191" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:19.727402" elapsed="0.005812"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.733819" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:19.733915" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:19.733380" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:19.734503" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:19.734225" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:19.734011" elapsed="0.000631">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:19.733992" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:19.734824" 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-10T00:51:19.735013" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:19.735079" 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-10T00:51:19.724771" elapsed="0.010416">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:19.724531" elapsed="0.010751">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:19.724392" elapsed="0.010947">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:19.723986" elapsed="0.011444">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:19.735934" elapsed="0.000057"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:19.697424" elapsed="0.038771">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:20.763055" elapsed="0.000249"/>
</kw>
<msg time="2026-04-10T00:51:20.763386" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:20.762359" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:20.761809" elapsed="0.001734"/>
</kw>
<msg time="2026-04-10T00:51:20.763591" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:20.752953" elapsed="0.010684"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:20.752351" elapsed="0.011360"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.764180" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:20.763918" 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-10T00:51:20.769735" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:20.769232" elapsed="0.000542"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.770320" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:20.769992" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:20.770400" elapsed="0.000038"/>
</return>
<msg time="2026-04-10T00:51:20.770592" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:20.768793" elapsed="0.001825"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:20.770792" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.771499" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:20.771147" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.771947" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:20.771686" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.772363" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:20.772121" 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-10T00:51:20.772801" 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-10T00:51:20.773077" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:20.772929" 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-10T00:51:20.773302" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:20.773159" 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-10T00:51:20.773535" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:20.773380" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:20.772908" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:20.772630" elapsed="0.001009"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:20.772438" elapsed="0.001228"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:20.773706" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:20.773925" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:20.773972" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:20.768057" elapsed="0.005939"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.774521" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:20.774602" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:20.774237" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:20.775238" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:20.774953" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:20.774697" elapsed="0.000687">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:20.774678" 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-10T00:51:20.775580" 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-10T00:51:20.775755" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:20.775822" 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-10T00:51:20.765305" elapsed="0.010644">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:20.765062" elapsed="0.010959">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:20.764905" 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-10T00:51:20.764470" elapsed="0.011695">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:20.776396" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:20.737202" elapsed="0.039311">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:21.804933" elapsed="0.000270"/>
</kw>
<msg time="2026-04-10T00:51:21.805275" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:21.804248" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:21.803754" elapsed="0.001685"/>
</kw>
<msg time="2026-04-10T00:51:21.805492" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:21.795466" elapsed="0.010073"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:21.794908" elapsed="0.010707"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.806093" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:21.805815" 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-10T00:51:21.811441" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:21.810995" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.811955" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:21.811640" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:21.812032" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:21.812198" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:21.810587" 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-10T00:51:21.812376" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.813090" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:21.812697" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.813602" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:21.813358" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.814026" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:21.813771" 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-10T00:51:21.814555" 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-10T00:51:21.814815" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:21.814668" 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-10T00:51:21.815052" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:21.814912" 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-10T00:51:21.815268" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:21.815129" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:21.814647" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:21.814384" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:21.814099" elapsed="0.001294"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:21.815433" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:21.815632" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:21.815678" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:21.809790" elapsed="0.005911"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.816158" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:21.816235" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:21.815884" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:21.817047" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:21.816539" elapsed="0.000586">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:21.816326" elapsed="0.000868">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:21.816308" 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-10T00:51:21.817380" 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-10T00:51:21.817550" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:21.817615" 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-10T00:51:21.807245" elapsed="0.010477">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:21.807000" elapsed="0.010789">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:21.806835" elapsed="0.011024">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:21.806407" elapsed="0.011546">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:21.818182" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:21.777383" elapsed="0.040928">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:22.844401" elapsed="0.000294"/>
</kw>
<msg time="2026-04-10T00:51:22.844773" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:22.843633" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:22.843106" elapsed="0.001956"/>
</kw>
<msg time="2026-04-10T00:51:22.845117" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:22.834608" 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-10T00:51:22.834195" elapsed="0.011060"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.845803" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:22.845480" 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-10T00:51:22.850930" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:22.850524" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.851412" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:22.851119" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:22.851489" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:22.851653" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:22.850155" 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-10T00:51:22.851829" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.852498" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:22.852162" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.853134" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:22.852680" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.853553" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:22.853309" 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-10T00:51:22.854021" 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-10T00:51:22.854277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:22.854131" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:22.854494" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:22.854356" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:22.854715" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:22.854570" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:22.854111" elapsed="0.000678"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:22.853837" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:22.853633" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:22.854895" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:22.855096" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:22.855143" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:22.849412" elapsed="0.005754"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.855608" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:22.855684" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:22.855336" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:22.856285" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:22.856008" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:22.855776" elapsed="0.000687">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:22.855758" 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-10T00:51:22.856649" 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-10T00:51:22.856821" elapsed="0.000034"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:22.856903" 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-10T00:51:22.846935" elapsed="0.010076">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:22.846677" elapsed="0.010405">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:22.846525" elapsed="0.010612">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:22.846124" elapsed="0.011103">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:22.857458" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:22.819177" elapsed="0.038398">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:23.880829" elapsed="0.000253"/>
</kw>
<msg time="2026-04-10T00:51:23.881148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:23.880180" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:23.879696" elapsed="0.001593"/>
</kw>
<msg time="2026-04-10T00:51:23.881352" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:23.871463" elapsed="0.009934"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:23.871053" elapsed="0.010419"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.881934" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:23.881662" 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-10T00:51:23.887293" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:23.886902" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.887767" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:23.887480" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:23.887855" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:51:23.888019" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:23.886512" 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-10T00:51:23.888197" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.888860" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:23.888510" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.889287" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:23.889047" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.889712" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:23.889473" 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-10T00:51:23.890150" 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-10T00:51:23.890468" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:23.890322" 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-10T00:51:23.890692" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:23.890549" 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-10T00:51:23.890923" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:23.890769" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:23.890301" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:23.889985" elapsed="0.001038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:23.889785" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:23.891088" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:23.891289" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:23.891336" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:23.885773" elapsed="0.005587"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.891803" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:23.891894" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:23.891531" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:23.892481" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:23.892202" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:23.891988" elapsed="0.000632">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:23.891970" elapsed="0.000681">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:23.892802" 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-10T00:51:23.892988" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:23.893056" 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-10T00:51:23.882984" elapsed="0.010181">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:23.882739" elapsed="0.010496">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:23.882596" elapsed="0.010694">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:23.882204" elapsed="0.011196">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:23.893631" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:23.858397" elapsed="0.035353">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:24.919912" elapsed="0.000245"/>
</kw>
<msg time="2026-04-10T00:51:24.920223" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:24.919222" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:24.918724" elapsed="0.001647"/>
</kw>
<msg time="2026-04-10T00:51:24.920419" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:24.910384" elapsed="0.010081"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:24.909921" elapsed="0.010729"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.921167" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:24.920892" 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-10T00:51:24.926344" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:24.925932" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.926861" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:24.926541" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:24.926940" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:24.927104" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:24.925528" 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-10T00:51:24.927285" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.927982" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:24.927614" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.928429" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:24.928174" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.928922" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:24.928621" elapsed="0.000330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:24.929364" 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-10T00:51:24.929625" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:24.929478" 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-10T00:51:24.929864" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:24.929708" 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-10T00:51:24.930090" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:24.929946" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:24.929457" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:24.929189" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:24.929001" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:24.930257" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:24.930467" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:24.930515" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:24.924757" elapsed="0.005783"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.931014" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:24.931096" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:24.930714" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:24.931919" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:24.931410" elapsed="0.000584">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:24.931191" elapsed="0.000873">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:24.931172" elapsed="0.000925">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:24.932256" 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-10T00:51:24.932481" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:24.932552" 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-10T00:51:24.922252" elapsed="0.010465">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:24.922014" elapsed="0.010779">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:24.921869" elapsed="0.011017">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:24.921447" 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-10T00:51:24.933244" elapsed="0.000027"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:24.894550" elapsed="0.038819">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:25.960609" elapsed="0.000284"/>
</kw>
<msg time="2026-04-10T00:51:25.960968" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:25.959873" elapsed="0.001167"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:25.959325" elapsed="0.001810"/>
</kw>
<msg time="2026-04-10T00:51:25.961184" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:25.950492" elapsed="0.010741"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:25.949816" elapsed="0.011501"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.961790" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:25.961525" 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-10T00:51:25.967082" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:25.966663" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.967581" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:25.967285" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:25.967657" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:25.967822" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:25.966286" 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-10T00:51:25.968017" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.968975" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:25.968348" elapsed="0.000655"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.969421" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:25.969168" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.969857" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:25.969595" 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-10T00:51:25.970304" 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-10T00:51:25.970567" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:25.970417" 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-10T00:51:25.970790" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:25.970649" 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-10T00:51:25.971114" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:25.970967" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:25.970396" elapsed="0.000796"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:25.970121" elapsed="0.001104"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:25.969934" elapsed="0.001320"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:25.971296" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:25.971504" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:25.971551" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:25.965539" elapsed="0.006036"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.972048" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:25.972126" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:25.971748" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:25.972762" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:25.972468" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:25.972227" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:25.972203" 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-10T00:51:25.973120" 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-10T00:51:25.973302" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:25.973371" 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-10T00:51:25.962936" elapsed="0.010546">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:25.962671" elapsed="0.010880">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:25.962519" elapsed="0.011087">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:25.962106" 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-10T00:51:25.973944" elapsed="0.000033"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:25.934287" elapsed="0.039784">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:27.000799" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:51:27.001116" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:27.000153" elapsed="0.001025"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:26.999649" elapsed="0.001610"/>
</kw>
<msg time="2026-04-10T00:51:27.001305" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:26.991638" elapsed="0.009712"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:26.991226" elapsed="0.010200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.001889" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:27.001614" 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-10T00:51:27.007343" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:27.006950" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.007822" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:27.007530" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:27.007929" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:27.008137" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:27.006476" elapsed="0.001687"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:27.008317" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.008992" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:27.008634" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.009420" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:27.009177" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.009833" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:27.009592" 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-10T00:51:27.010272" 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-10T00:51:27.010524" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:27.010379" 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-10T00:51:27.010746" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:27.010604" 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-10T00:51:27.010985" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:27.010828" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:27.010360" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:27.010105" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:27.009922" elapsed="0.001187"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:27.011149" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:27.011349" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:27.011396" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:27.005740" elapsed="0.005680"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.011872" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:27.011975" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:27.011589" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:27.012560" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:27.012284" elapsed="0.000345">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:27.012069" elapsed="0.000625">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:27.012051" elapsed="0.000675">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:27.012891" 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-10T00:51:27.013061" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:27.013128" 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-10T00:51:27.002954" elapsed="0.010281">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:27.002699" elapsed="0.010606">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:27.002560" 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-10T00:51:27.002164" elapsed="0.011286">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:27.013725" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:26.974930" elapsed="0.038926">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:28.039519" elapsed="0.000252"/>
</kw>
<msg time="2026-04-10T00:51:28.039859" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:28.038813" elapsed="0.001113"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:28.038337" elapsed="0.001673"/>
</kw>
<msg time="2026-04-10T00:51:28.040057" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:28.029863" 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-10T00:51:28.029375" elapsed="0.010821"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.040658" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:28.040394" 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-10T00:51:28.045839" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:28.045444" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.046345" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:28.046044" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:28.046420" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:28.046580" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:28.045064" 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-10T00:51:28.046755" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.047470" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:28.047090" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.047920" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:28.047653" elapsed="0.000293"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.048344" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:28.048092" 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-10T00:51:28.048769" 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-10T00:51:28.049044" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:28.048896" 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-10T00:51:28.049267" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:28.049125" 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-10T00:51:28.049504" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:28.049359" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:28.048874" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:28.048600" elapsed="0.001003"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:28.048418" elapsed="0.001213"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:28.049741" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:28.049969" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:28.050017" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:28.044323" elapsed="0.005718"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.050504" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:28.050585" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:28.050213" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:28.051431" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:28.051112" elapsed="0.000397">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:28.050882" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:28.050663" elapsed="0.000947">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:28.051768" 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-10T00:51:28.051962" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:28.052032" 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-10T00:51:28.041771" elapsed="0.010374">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:28.041534" elapsed="0.010682">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:28.041389" elapsed="0.010882">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:28.040974" 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-10T00:51:28.052614" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:28.014710" elapsed="0.038023">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:29.077736" elapsed="0.000295"/>
</kw>
<msg time="2026-04-10T00:51:29.078104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:29.077075" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:29.076568" elapsed="0.001690"/>
</kw>
<msg time="2026-04-10T00:51:29.078304" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:29.068274" elapsed="0.010076"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:29.067861" elapsed="0.010564"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.078917" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:29.078626" elapsed="0.000356"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.084310" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:29.083897" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.084809" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:29.084503" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:29.084904" elapsed="0.000034"/>
</return>
<msg time="2026-04-10T00:51:29.085164" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:29.083499" elapsed="0.001693"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-10T00:51:29.085349" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.086064" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:29.085681" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.086535" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:29.086276" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.087060" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:29.086716" elapsed="0.000374"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:29.087501" 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-10T00:51:29.087764" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:29.087614" 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-10T00:51:29.088007" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:29.087863" 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-10T00:51:29.088229" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:29.088088" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:29.087593" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:29.087329" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:29.087141" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:29.088398" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:29.088606" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:29.088655" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:29.082720" elapsed="0.005960"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.089153" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:29.089230" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:29.088872" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:29.089831" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:29.089544" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:29.089325" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:29.089306" 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-10T00:51:29.090176" 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-10T00:51:29.090348" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:29.090415" 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-10T00:51:29.080037" elapsed="0.010488">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:29.079769" elapsed="0.010827">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:29.079621" 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-10T00:51:29.079218" elapsed="0.011527">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:29.091009" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:29.053581" elapsed="0.037550">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:30.117103" elapsed="0.000257"/>
</kw>
<msg time="2026-04-10T00:51:30.117430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:30.116426" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:30.115950" elapsed="0.001628"/>
</kw>
<msg time="2026-04-10T00:51:30.117625" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:30.107902" elapsed="0.009768"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:30.107427" elapsed="0.010317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.118215" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:30.117957" 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-10T00:51:30.123309" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:30.122919" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.123785" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:30.123496" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:30.123875" elapsed="0.000033"/>
</return>
<msg time="2026-04-10T00:51:30.124038" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:30.122536" 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-10T00:51:30.124213" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.124880" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:30.124528" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.125301" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:30.125062" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.125710" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:30.125473" 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-10T00:51:30.126146" 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-10T00:51:30.126407" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:30.126258" elapsed="0.000234"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:30.126663" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:30.126520" 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-10T00:51:30.126895" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:30.126739" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:30.126237" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:30.125980" elapsed="0.001015"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:30.125782" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:30.127062" elapsed="0.000027"/>
</return>
<msg time="2026-04-10T00:51:30.127260" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:30.127306" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:30.121800" elapsed="0.005528"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.129614" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:30.129696" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:30.127573" elapsed="0.002148"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:30.130326" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:30.130035" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:30.129793" elapsed="0.000697">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:30.129773" 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-10T00:51:30.130687" 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-10T00:51:30.130874" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:30.130942" 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-10T00:51:30.119305" elapsed="0.011746">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:30.119068" elapsed="0.012052">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:30.118925" elapsed="0.012250">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:30.118502" 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-10T00:51:30.131497" elapsed="0.000024"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:30.092196" elapsed="0.039416">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:31.156684" elapsed="0.000268"/>
</kw>
<msg time="2026-04-10T00:51:31.157019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:31.156037" 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 [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:31.155560" elapsed="0.001607"/>
</kw>
<msg time="2026-04-10T00:51:31.157214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:31.147490" elapsed="0.009769"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:31.147074" elapsed="0.010258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.157780" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:31.157524" 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-10T00:51:31.163100" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:31.162691" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.163574" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:31.163286" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:31.163648" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:31.163808" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:31.162318" 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-10T00:51:31.164002" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.164655" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:31.164317" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.165174" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:31.164927" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.165586" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:31.165347" 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-10T00:51:31.166048" 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-10T00:51:31.166303" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:31.166158" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:31.166521" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:31.166383" 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-10T00:51:31.166738" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:31.166598" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:31.166137" elapsed="0.000675"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:31.165855" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:31.165658" elapsed="0.001220"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:31.166918" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:31.167120" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:31.167166" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:31.161561" elapsed="0.005629"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.167632" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:31.167707" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:31.167359" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:31.168311" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:31.168029" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:31.167799" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:31.167780" 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-10T00:51:31.168633" 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-10T00:51:31.168805" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:31.168887" 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-10T00:51:31.158867" elapsed="0.010129">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:31.158617" elapsed="0.010448">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:31.158475" elapsed="0.010645">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:31.158081" elapsed="0.011131">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:31.169442" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:31.132517" elapsed="0.037041">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:32.195294" elapsed="0.000248"/>
</kw>
<msg time="2026-04-10T00:51:32.195611" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:32.194622" elapsed="0.001053"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:32.194161" elapsed="0.001678"/>
</kw>
<msg time="2026-04-10T00:51:32.195907" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:32.185977" elapsed="0.009976"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:32.185546" elapsed="0.010482"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.196479" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:32.196221" 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-10T00:51:32.201566" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:32.201162" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.202065" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:32.201754" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:32.202141" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:32.202303" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:32.200777" 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-10T00:51:32.202479" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.203146" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:32.202794" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.203568" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:32.203329" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.203995" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:32.203739" 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-10T00:51:32.204415" 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-10T00:51:32.204672" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:32.204525" 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-10T00:51:32.204921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:32.204762" 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-10T00:51:32.205140" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:32.205000" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:32.204505" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:32.204250" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:32.204068" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:32.205304" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:32.205533" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:32.205582" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:32.200061" elapsed="0.005544"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.206070" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:32.206147" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:32.205776" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:32.206949" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:32.206454" elapsed="0.000573">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:32.206239" elapsed="0.000904">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:32.206221" 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-10T00:51:32.207334" 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-10T00:51:32.207508" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:32.207574" 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-10T00:51:32.197563" elapsed="0.010119">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:32.197311" elapsed="0.010441">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:32.197166" elapsed="0.010641">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-10T00:51:32.196753" elapsed="0.011159">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:32.208144" elapsed="0.000025"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:32.170389" elapsed="0.037870">No leader found.</status>
</kw>
<kw name="Check Ovsdb Shards Status" owner="ClusterOvsdb">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.232654" elapsed="0.000334"/>
</kw>
<msg time="2026-04-10T00:51:33.233084" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.231910" elapsed="0.001253"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:33.231421" elapsed="0.001843"/>
</kw>
<msg time="2026-04-10T00:51:33.233318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.223210" elapsed="0.010156"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-10T00:51:33.222772" elapsed="0.010670"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.233929" level="INFO">['topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:33.233640" 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-10T00:51:33.239175" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.238761" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.239650" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.239361" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.239723" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:33.239900" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.238386" 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-10T00:51:33.240077" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.240727" level="INFO">${ds_type} = operational</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.240389" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.241408" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.240924" elapsed="0.000511"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.241827" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.241584" 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-10T00:51:33.242270" 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-10T00:51:33.242608" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.242459" 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-10T00:51:33.242832" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.242689" 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-10T00:51:33.243070" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.242927" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.242437" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.242101" elapsed="0.001070"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.241917" elapsed="0.001281"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-10T00:51:33.243238" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:33.243441" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-10T00:51:33.243489" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-10T00:51:33.237576" elapsed="0.005937"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.243977" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:33.244054" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:33.243686" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.244673" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.244365" elapsed="0.000388">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-10T00:51:33.244147" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-10T00:51:33.244129" 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-10T00:51:33.245094" 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-10T00:51:33.245277" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.245343" 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-10T00:51:33.235022" elapsed="0.010434">No leader found.</status>
</kw>
<var name="${shard_name}">topology</var>
<status status="FAIL" start="2026-04-10T00:51:33.234760" elapsed="0.010767">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-10T00:51:33.234614" 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-10T00:51:33.234209" elapsed="0.011464">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.245925" elapsed="0.000026"/>
</kw>
<arg>${controller_index_list}</arg>
<doc>Check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.209181" elapsed="0.036863">No leader found.</status>
</kw>
<msg time="2026-04-10T00:51:33.246133" level="FAIL">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</msg>
<arg>90s</arg>
<arg>1s</arg>
<arg>Check Ovsdb Shards Status</arg>
<arg>${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.747576" elapsed="90.498657">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Check Shard Status after some cluster event.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.745444" elapsed="90.500893">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</kw>
<doc>Create original cluster list and check Status for all shards in Ovsdb application.</doc>
<status status="FAIL" start="2026-04-10T00:50:02.731712" elapsed="90.514778">Keyword 'Check Ovsdb Shards Status' failed after retrying for 1 minute 30 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-s2-t25" name="Check Entity Owner Status After Recover" line="126">
<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-10T00:51:33.249556" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:33.249293" 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-10T00:51:33.250886" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.250754" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.250735" 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-10T00:51:33.255647" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.255525" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.255499" elapsed="0.000218"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.256747" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.256341" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.257270" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.256954" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.257345" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:33.257504" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.255961" 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-10T00:51:33.257897" 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-10T00:51:33.258143" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.258000" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.257982" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.257739" elapsed="0.000506"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.257586" 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-10T00:51:33.255081" elapsed="0.003241"/>
</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-10T00:51:33.250464" elapsed="0.007917"/>
</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-10T00:51:33.249988" elapsed="0.008440"/>
</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-10T00:51:33.247261" elapsed="0.011220"/>
</kw>
<kw name="Get Ovsdb Entity Owner Status For One Device" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:33.269968" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<var>${new_owner}</var>
<var>${new_candidate_list}</var>
<arg>ovsdb://uuid/${ovsdb_uuid}</arg>
<arg>1</arg>
<doc>Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.266287" elapsed="0.003722">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${new_owner}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.270198" elapsed="0.000023"/>
</kw>
<doc>Check Entity Owner Status and identify owner and candidate.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.246713" elapsed="0.023634">Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t26" name="Create Bridge Manually and Verify After Recover" 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-10T00:51:33.273417" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:33.273156" 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-10T00:51:33.274667" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.274556" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.274537" 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-10T00:51:33.279365" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.279255" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.279236" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.280440" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.280056" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.280952" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.280638" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.281039" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:33.281198" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.279657" 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-10T00:51:33.281614" 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-10T00:51:33.281870" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.281712" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.281695" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.281471" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.281318" 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-10T00:51:33.278886" elapsed="0.003170"/>
</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-10T00:51:33.274269" elapsed="0.007841"/>
</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-10T00:51:33.273830" elapsed="0.008325"/>
</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-10T00:51:33.271106" elapsed="0.011101"/>
</kw>
<kw name="Create Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.290190" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.289921" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.289902" elapsed="0.000371"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.290594" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:51:33.290700" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.290422" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.291286" level="INFO">Attempting to execute command "sudo ovs-vsctl add-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:33.290895" elapsed="0.000439"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.291894" level="INFO">${conn_id} = 77</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.291493" elapsed="0.000430"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.292889" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:33.292973" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:33.292545" elapsed="0.000467"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.293183" elapsed="0.000328"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.294380" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:51:33.294680" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.294060" elapsed="0.001144">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.295262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.293681" elapsed="0.001632"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.292150" elapsed="0.003266">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.295590" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.295767" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.296001" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.296173" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.296094" elapsed="0.000140"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.296076" elapsed="0.000185"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.296354" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.296317" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.296301" elapsed="0.000116"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.296449" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.299305" elapsed="0.000319"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.299789" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.300103" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:51:33.296902" elapsed="0.003358"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.289383" elapsed="0.010953">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.300393" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.288783" elapsed="0.011658"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.288286" elapsed="0.012253">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>br-s1=5</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.300746" elapsed="0.000024"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.300957" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.301173" elapsed="0.000022"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.301376" elapsed="0.000021"/>
</kw>
<doc>Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.286254" elapsed="0.015242">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create bridge with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.270539" elapsed="0.031088">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t27" name="Add Port Manually and Verify After Recover" 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-10T00:51:33.304665" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:33.304387" 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-10T00:51:33.306016" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.305904" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.305884" 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-10T00:51:33.310678" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.310570" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.310552" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.311740" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.311358" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.312228" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.311942" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.312299" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:33.312453" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.310986" elapsed="0.001491"/>
</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-10T00:51:33.312878" 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-10T00:51:33.313134" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.312978" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.312961" elapsed="0.000249"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.312723" elapsed="0.000511"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.312568" 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-10T00:51:33.310193" elapsed="0.003118"/>
</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-10T00:51:33.305597" elapsed="0.007768"/>
</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-10T00:51:33.305163" elapsed="0.008247"/>
</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-10T00:51:33.302372" elapsed="0.011089"/>
</kw>
<kw name="Add Sample Port To The Manual Bridge And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.321434" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.321167" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.321147" elapsed="0.000369"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.321791" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:51:33.321911" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.321662" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.322466" level="INFO">Attempting to execute command "sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:33.322089" elapsed="0.000423"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.323045" level="INFO">${conn_id} = 79</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.322669" elapsed="0.000402"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.323946" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:33.324024" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:33.323669" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.324227" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.325700" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:51:33.325933" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.325389" elapsed="0.000955">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.326400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.325025" elapsed="0.001424"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.323282" elapsed="0.003268">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.326721" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.326908" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.327084" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.327206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.327168" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.327150" elapsed="0.000119"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.327353" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.327318" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.327304" elapsed="0.000146"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.327482" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.330159" elapsed="0.000311"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.330631" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.330936" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:51:33.327792" elapsed="0.003293"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.320582" elapsed="0.010578">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.331214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.320038" elapsed="0.011221"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.319519" elapsed="0.011836">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_operational}</var>
<arg>vx1=2</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.331539" elapsed="0.000022"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary_config}</var>
<arg>vx1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.331727" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_CONFIG_TOPO_API}</arg>
<arg>dictionary=${dictionary_config}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.331930" elapsed="0.000021"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary_operational}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.332135" elapsed="0.000020"/>
</kw>
<doc>Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.317485" elapsed="0.014765">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Add port with OVS command and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.301822" elapsed="0.030554">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t28" name="Delete the Bridge Manually and Verify After Recover" 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-10T00:51:33.335441" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:33.335184" elapsed="0.000519"/>
</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-10T00:51:33.336678" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.336568" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.336549" 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-10T00:51:33.341301" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.341194" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.341177" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.342355" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.341974" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.342823" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.342539" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.342909" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:33.343063" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.341587" 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-10T00:51:33.343424" 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-10T00:51:33.343706" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.343563" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.343545" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.343285" elapsed="0.000521"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.343139" 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-10T00:51:33.340818" elapsed="0.003082"/>
</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-10T00:51:33.336285" elapsed="0.007669"/>
</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-10T00:51:33.335862" elapsed="0.008136"/>
</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-10T00:51:33.333165" elapsed="0.010883"/>
</kw>
<kw name="Delete Sample Bridge Manually And Verify" owner="ClusterOvsdb">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.351951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.351673" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.351655" elapsed="0.000377"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.352305" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:51:33.352405" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.352179" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.352988" level="INFO">Attempting to execute command "sudo ovs-vsctl del-br br-s1" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:33.352580" elapsed="0.000476"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.353571" level="INFO">${conn_id} = 81</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.353215" elapsed="0.000382"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.354508" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:33.354586" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:33.354236" elapsed="0.000374"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.354766" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:51:33.356010" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:51:33.356226" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.355621" elapsed="0.001462">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.357147" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.355268" elapsed="0.001929"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.353806" elapsed="0.003492">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.357472" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.357642" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.357818" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.357958" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.357918" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.357900" elapsed="0.000121"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.358104" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.358070" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.358056" elapsed="0.000106"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.358191" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:33.361062" elapsed="0.000338"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.361570" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:51:33.361889" elapsed="0.000098"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:51:33.358537" elapsed="0.003504"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.351152" elapsed="0.010965">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:33.362173" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.350589" elapsed="0.011631"/>
</kw>
<arg>${ovs_system_ip}</arg>
<arg>sudo ovs-vsctl del-br br-s1</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.350104" elapsed="0.012214">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>br-s1=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.362503" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:33.362773" elapsed="0.000026"/>
</kw>
<doc>Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.348070" elapsed="0.014851">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Delete bridge with OVS command and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.332566" elapsed="0.030504">OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-s2-t29" name="Verify Modified Port After Recover" line="145">
<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-10T00:51:33.366046" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:33.365760" 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-10T00:51:33.367319" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.367209" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.367190" 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-10T00:51:33.372039" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:33.371930" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:33.371912" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.373128" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:33.372707" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.373603" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:33.373315" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:33.373675" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:33.373829" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:33.372333" 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-10T00:51:33.374218" 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-10T00:51:33.374456" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:33.374314" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:33.374298" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:33.374077" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:33.373925" 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-10T00:51:33.371550" elapsed="0.003081"/>
</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-10T00:51:33.366914" elapsed="0.007829"/>
</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-10T00:51:33.366457" elapsed="0.008334"/>
</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-10T00:51:33.363741" elapsed="0.011118"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:51:33.382782" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:51:33.382416" elapsed="0.000395"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:33.395251" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.391492" elapsed="0.003797">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:34.415723" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:34.410433" elapsed="0.005358">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:35.436394" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:35.430905" elapsed="0.005559">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:36.455062" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:36.450776" elapsed="0.004339">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:37.474349" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:37.470489" elapsed="0.003917">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:38.494952" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.489513" elapsed="0.005507">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:51:38.495173" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:51:33.383020" elapsed="5.112325">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.380412" elapsed="5.115064">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify modified port exists in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:33.363270" elapsed="5.132378">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t30" name="Delete Port In New Owner After Recover" 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-10T00:51:38.498753" elapsed="0.000287"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.498463" elapsed="0.000634"/>
</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-10T00:51:38.500162" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.500024" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.500000" elapsed="0.000237"/>
</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-10T00:51:38.504876" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.504747" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.504672" elapsed="0.000275"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.505964" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.505555" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.506448" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.506153" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.506521" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:38.506717" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.505176" elapsed="0.001568"/>
</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-10T00:51:38.507118" 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-10T00:51:38.507363" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.507217" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.507200" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.506975" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.506802" elapsed="0.000688"/>
</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-10T00:51:38.504331" 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-10T00:51:38.499704" elapsed="0.007895"/>
</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-10T00:51:38.499252" elapsed="0.008392"/>
</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-10T00:51:38.496445" elapsed="0.011250"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:38.518927" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.515333" elapsed="0.003635">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.495898" elapsed="0.023210">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t31" name="Delete Bridge In New Owner And Verify After Recover" 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-10T00:51:38.522363" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.522096" 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-10T00:51:38.523687" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.523563" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.523544" 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-10T00:51:38.528359" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.528253" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.528235" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.529446" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.529055" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.529953" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.529636" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.530026" elapsed="0.000030"/>
</return>
<msg time="2026-04-10T00:51:38.530181" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.528658" 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-10T00:51:38.530552" 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-10T00:51:38.530912" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.530747" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.530726" elapsed="0.000275"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.530411" elapsed="0.000633"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.530260" elapsed="0.000819"/>
</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-10T00:51:38.527892" elapsed="0.003245"/>
</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-10T00:51:38.523252" elapsed="0.007940"/>
</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-10T00:51:38.522814" elapsed="0.008421"/>
</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-10T00:51:38.519873" elapsed="0.011411"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:38.542588" level="FAIL">Variable '${new_owner}' not found.</msg>
<arg>${new_owner}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.538994" elapsed="0.003667">Variable '${new_owner}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.519306" elapsed="0.023498">Variable '${new_owner}' not found.</status>
</test>
<test id="s1-s2-s2-t32" name="Create Bridge In Old Candidate and Verify After Recover" 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-10T00:51:38.546326" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.546056" 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-10T00:51:38.547620" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.547508" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.547490" 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-10T00:51:38.552497" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.552387" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.552368" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.553578" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.553194" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.554083" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.553774" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.554155" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:38.554314" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.552797" elapsed="0.001542"/>
</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-10T00:51:38.554722" 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-10T00:51:38.554987" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.554825" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.554808" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.554538" elapsed="0.000548"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.554391" elapsed="0.000719"/>
</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-10T00:51:38.552022" elapsed="0.003140"/>
</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-10T00:51:38.547222" 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-10T00:51:38.546782" 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-10T00:51:38.543672" elapsed="0.011665"/>
</kw>
<kw name="Create Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:38.567004" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Create bridge br01 in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.563103" elapsed="0.003941">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Bridge in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.543126" elapsed="0.024113">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t33" name="Create Port In Old Owner and Verify After Recover" line="161">
<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-10T00:51:38.570270" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.570002" 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-10T00:51:38.571554" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.571443" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.571425" 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-10T00:51:38.576303" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.576193" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.576174" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.577430" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.577039" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.577942" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.577616" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.578015" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:38.578172" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.576592" 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-10T00:51:38.578560" elapsed="0.000048"/>
</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-10T00:51:38.578862" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.578699" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.578681" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.578400" elapsed="0.000564"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.578249" 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-10T00:51:38.575812" elapsed="0.003230"/>
</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-10T00:51:38.571157" elapsed="0.007939"/>
</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-10T00:51:38.570716" elapsed="0.008425"/>
</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-10T00:51:38.567991" elapsed="0.011201"/>
</kw>
<kw name="Create Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:38.591013" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Add Port vx2 to bridge br01 in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.587149" elapsed="0.003904">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Create Port in Owner and verify it gets applied from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.567433" elapsed="0.023752">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t34" name="Modify the destination IP of Port In Old Owner After Recover" line="165">
<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-10T00:51:38.594174" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.593917" 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-10T00:51:38.595443" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.595334" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.595316" 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-10T00:51:38.600152" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.600043" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.600025" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.601237" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.600829" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.601766" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.601464" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.601855" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:38.602014" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.600438" elapsed="0.001601"/>
</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-10T00:51:38.602385" 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-10T00:51:38.602656" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.602481" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.602465" elapsed="0.000276"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.602243" elapsed="0.000522"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.602091" 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-10T00:51:38.599663" elapsed="0.003193"/>
</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-10T00:51:38.595050" elapsed="0.007866"/>
</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-10T00:51:38.594606" elapsed="0.008354"/>
</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-10T00:51:38.591891" elapsed="0.011120"/>
</kw>
<kw name="Modify the destination IP of Sample Port" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:38.611260" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Modify the dst ip of port vx2 in bridge br01 in controller ${controller_index}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.607139" elapsed="0.004162">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Modify the dst ip of existing port in Owner.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.591371" elapsed="0.020064">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t35" name="Verify Port Is Modified After Recover" line="169">
<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-10T00:51:38.614826" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:38.614525" elapsed="0.000586"/>
</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-10T00:51:38.616129" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.616017" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.615998" 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-10T00:51:38.620778" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:38.620668" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:38.620648" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.621871" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:38.621459" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.622351" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:38.622063" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:38.622423" elapsed="0.000028"/>
</return>
<msg time="2026-04-10T00:51:38.622593" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:38.621086" 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-10T00:51:38.622991" 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-10T00:51:38.623238" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:38.623089" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:38.623072" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:38.622832" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:38.622680" 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-10T00:51:38.620302" elapsed="0.003150"/>
</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-10T00:51:38.615708" elapsed="0.007799"/>
</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-10T00:51:38.615260" elapsed="0.008292"/>
</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-10T00:51:38.612279" elapsed="0.011325"/>
</kw>
<kw name="Verify Sample Port Is Modified" owner="ClusterOvsdb">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-10T00:51:38.629979" level="INFO">${port_dictionary} = {'br01': '6', 'vx2': '3', '10.0.0.19': '1'}</msg>
<var>${port_dictionary}</var>
<arg>br01=6</arg>
<arg>vx2=3</arg>
<arg>10.0.0.19=1</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-10T00:51:38.629595" elapsed="0.000413"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:38.642428" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.638625" elapsed="0.003843">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:39.661472" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:39.656442" elapsed="0.005103">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:40.680570" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:40.676737" elapsed="0.003889">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:41.699104" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:41.694076" elapsed="0.005079">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:42.717805" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:42.712651" elapsed="0.005217">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<kw name="Check_Item_Occurrence_Member_List_Or_All" owner="ClusterManagement">
<msg time="2026-04-10T00:51:43.738412" level="FAIL">Variable '${ovsdb_uuid}' not found.</msg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Send a GET with the supplied uri to all or some members defined in ${member_index_list}.
Then check received for occurrences of items expressed in a dictionary ${dictionary}.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.734599" elapsed="0.003866">Variable '${ovsdb_uuid}' not found.</status>
</kw>
<msg time="2026-04-10T00:51:43.738580" level="FAIL">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</msg>
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}</arg>
<arg>dictionary=${port_dictionary}</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-10T00:51:38.630200" elapsed="5.108524">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify dst ip of port vx2 in bridge br01 gets modified in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.627565" elapsed="5.111302">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</kw>
<doc>Verify port is modified in all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:38.611751" elapsed="5.127271">Keyword 'ClusterManagement.Check_Item_Occurrence_Member_List_Or_All' failed after retrying for 5 seconds. The last error was: Variable '${ovsdb_uuid}' not found.</status>
</test>
<test id="s1-s2-s2-t36" name="Delete Port In Old Owner After Recover" 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-10T00:51:43.742320" elapsed="0.000256"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:43.742047" 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-10T00:51:43.743751" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.743546" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.743523" elapsed="0.000304"/>
</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-10T00:51:43.748765" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.748644" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.748620" elapsed="0.000219"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.749920" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:43.749484" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.750432" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:43.750109" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:43.750505" elapsed="0.000032"/>
</return>
<msg time="2026-04-10T00:51:43.750667" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:43.749091" elapsed="0.001602"/>
</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-10T00:51:43.751074" 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-10T00:51:43.751322" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:43.751174" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:43.751157" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:43.750930" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.750752" 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-10T00:51:43.748258" elapsed="0.003246"/>
</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-10T00:51:43.743251" elapsed="0.008309"/>
</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-10T00:51:43.742786" elapsed="0.008819"/>
</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-10T00:51:43.739997" elapsed="0.011661"/>
</kw>
<kw name="Delete Sample Port And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:43.763262" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete port vx2 from bridge br01 in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.759420" elapsed="0.003882">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete port in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.739394" elapsed="0.024049">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t37" name="Delete Bridge In Old Owner And Verify After Recover" 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-10T00:51:43.766631" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:43.766374" 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-10T00:51:43.767946" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.767816" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.767798" 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-10T00:51:43.772560" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.772450" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.772432" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.773681" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:43.773294" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.774174" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:43.773883" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:43.774245" elapsed="0.000031"/>
</return>
<msg time="2026-04-10T00:51:43.774407" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:43.772914" elapsed="0.001518"/>
</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-10T00:51:43.774826" 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-10T00:51:43.775104" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:43.774945" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:43.774927" elapsed="0.000271"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:43.774683" elapsed="0.000539"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.774527" elapsed="0.000720"/>
</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-10T00:51:43.772076" 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-10T00:51:43.767528" elapsed="0.007829"/>
</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-10T00:51:43.767074" elapsed="0.008329"/>
</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-10T00:51:43.764367" elapsed="0.011089"/>
</kw>
<kw name="Delete Sample Bridge And Verify" owner="ClusterOvsdb">
<msg time="2026-04-10T00:51:43.787229" level="FAIL">Variable '${original_candidate}' not found.</msg>
<arg>${original_candidate}</arg>
<doc>Delete bridge br01 in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.783381" elapsed="0.003887">Variable '${original_candidate}' not found.</status>
</kw>
<doc>Delete bridge in Owner and verify it gets deleted from all instances.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.763736" elapsed="0.023667">Variable '${original_candidate}' not found.</status>
</test>
<test id="s1-s2-s2-t38" name="Cleans Up Test Environment For Next Suite" line="181">
<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-10T00:51:43.790592" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-10T00:51:43.790323" 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-10T00:51:43.791874" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.791745" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.791726" 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-10T00:51:43.796513" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.796398" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.796379" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.797608" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-10T00:51:43.797220" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.798108" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-10T00:51:43.797797" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-10T00:51:43.798180" elapsed="0.000029"/>
</return>
<msg time="2026-04-10T00:51:43.798337" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-10T00:51:43.796826" elapsed="0.001535"/>
</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-10T00:51:43.798704" 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-10T00:51:43.798961" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:43.798801" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:43.798784" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-10T00:51:43.798563" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.798414" 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-10T00:51:43.796015" elapsed="0.003123"/>
</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-10T00:51:43.791460" elapsed="0.007734"/>
</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-10T00:51:43.791037" elapsed="0.008203"/>
</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-10T00:51:43.788290" elapsed="0.011002"/>
</kw>
<kw name="Configure Exit OVSDB Connection" owner="ClusterOvsdb">
<kw name="Clean OVSDB Test Environment" owner="OVSDB">
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.804419" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-10T00:51:43.804120" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-04-10T00:51:43.804102" elapsed="0.000398"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:43.804809" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-10T00:51:43.804930" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-10T00:51:43.804645" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.805487" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-10T00:51:43.805107" elapsed="0.000427"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-10T00:51:43.806074" level="INFO">${conn_id} = 83</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:43.805690" elapsed="0.000411"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-10T00:51:43.806994" level="INFO">Length is 0.</msg>
<msg time="2026-04-10T00:51:43.807070" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-10T00:51:43.806701" elapsed="0.000393"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:43.807250" elapsed="0.000316"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-10T00:51:43.808447" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-10T00:51:43.808748" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.808101" elapsed="0.001133">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:43.809292" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.807732" elapsed="0.001611"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.806315" elapsed="0.003135">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.809624" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.809801" elapsed="0.000022"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.809996" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.810126" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.810084" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:43.810064" elapsed="0.000127"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.810283" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-10T00:51:43.810244" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-10T00:51:43.810229" elapsed="0.000118"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-10T00:51:43.810380" elapsed="0.000014"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-10T00:51:43.813161" elapsed="0.000319"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-10T00:51:43.813645" elapsed="0.000150"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-10T00:51:43.813961" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-10T00:51:43.810700" elapsed="0.003417"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.803583" elapsed="0.010611">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-10T00:51:43.814285" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.803035" elapsed="0.011301"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.802537" elapsed="0.011901">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.814619" elapsed="0.000025"/>
</kw>
<arg>${tools_system}</arg>
<status status="FAIL" start="2026-04-10T00:51:43.802191" elapsed="0.012543">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo ovs-vsctl del-manager</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.814949" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl stop</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.815160" elapsed="0.000023"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo rm -rf /etc/openvswitch/conf.db</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.815367" elapsed="0.000027"/>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${tools_system}</arg>
<arg>sudo /usr/share/openvswitch/scripts/ovs-ctl start</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.815576" elapsed="0.000023"/>
</kw>
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>General Use Keyword attempting to sanitize test environment for OVSDB related
tests. Not every step will always be neccessary, but should not cause any problems for
any new ovsdb test suites.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.801789" elapsed="0.013900">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${dictionary}</var>
<arg>ovsdb://uuid=0</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.815894" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Check_Item_Occurrence_Member_List_Or_All</arg>
<arg>uri=${RFC8040_OPERATIONAL_TOPO_API}</arg>
<arg>dictionary=${dictionary}</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-10T00:51:43.816094" elapsed="0.000021"/>
</kw>
<doc>Cleans up test environment, close existing sessions.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.799550" elapsed="0.016679">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Cleans up test environment, close existing sessions in teardown.</doc>
<status status="FAIL" start="2026-04-10T00:51:43.787687" elapsed="0.028676">OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-10T00:51:43.817123" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-10T00:51:43.817039" elapsed="0.000137"/>
</kw>
<doc>Test suite for Ovsdb Southbound Cluster - Candidate failover and recover</doc>
<status status="FAIL" start="2026-04-10T00:49:56.943059" elapsed="106.874150"/>
</suite>
<status status="FAIL" start="2026-04-10T00:48:09.910904" elapsed="213.907490"/>
</suite>
<status status="FAIL" start="2026-04-10T00:44:35.323745" elapsed="428.496073"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="164" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="ovsdb-upstream-clustering.txt" id="s1" pass="0" fail="164" skip="0">ovsdb-upstream-clustering.txt</stat>
<stat name="Southbound Cluster" id="s1-s1" pass="0" fail="82" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster</stat>
<stat name="Ovsdb Southbound Cluster" id="s1-s1-s1" pass="0" fail="44" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Ovsdb Southbound Cluster</stat>
<stat name="Southbound Cluster Extension" id="s1-s1-s2" pass="0" fail="38" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Southbound Cluster Extension</stat>
<stat name="Southbound Cluster" id="s1-s2" pass="0" fail="82" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster</stat>
<stat name="Ovsdb Southbound Cluster" id="s1-s2-s1" pass="0" fail="44" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Ovsdb Southbound Cluster</stat>
<stat name="Southbound Cluster Extension" id="s1-s2-s2" pass="0" fail="38" skip="0">ovsdb-upstream-clustering.txt.Southbound Cluster.Southbound Cluster Extension</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
