<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-25T23:40:08.537631" rpa="false" schemaversion="5">
<suite id="s1" name="controller-rest-clust-cars-perf-tell.txt">
<suite id="s1-s1" name="Restart Odl With Tell Based True" source="/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/dom_data_broker/restart_odl_with_tell_based_true.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.250724" 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-25T23:40:09.246121" elapsed="0.004674"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T23:40:09.245571" elapsed="0.005314"/>
</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-25T23:40:09.256689" 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-25T23:40:09.252346" elapsed="0.004377"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T23:40:09.256957" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:09.256829" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.256800" elapsed="0.000237"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.257588" 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-25T23:40:09.257205" elapsed="0.000432"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.258190" level="INFO">${cluster_size} = 3</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-25T23:40:09.257851" elapsed="0.000369"/>
</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-25T23:40:09.258821" elapsed="0.000305"/>
</kw>
<msg time="2026-04-25T23:40:09.259237" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:09.259288" level="INFO">${possibly_int_of_members} = 3</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-25T23:40:09.258403" elapsed="0.000910"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.259902" level="INFO">${int_of_members} = 3</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-25T23:40:09.259490" elapsed="0.000440"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.261605" 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-25T23:40:09.261321" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.262093" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:09.261804" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.262752" 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-25T23:40:09.262282" elapsed="0.000500"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.266211" elapsed="0.000315"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.267101" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.266766" elapsed="0.000362"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.267285" elapsed="0.000294"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.268469" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.268107" elapsed="0.000390"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:40:09.268546" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:40:09.268738" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:09.267799" elapsed="0.000966"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:40:09.269584" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.37:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a1231a450&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:40:09.269000" elapsed="0.000773"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.269971" elapsed="0.000285"/>
</kw>
<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="PASS" start="2026-04-25T23:40:09.265499" elapsed="0.004821"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:09.265298" elapsed="0.005068"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.271692" elapsed="0.000292"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.272481" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.272148" elapsed="0.000365"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.272684" elapsed="0.000229"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.273744" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.273417" elapsed="0.000355"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:40:09.273818" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:40:09.273993" level="INFO">${session_alias} = ClusterManagement__session_2</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:09.273111" elapsed="0.000908"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:40:09.274603" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.80:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a12319f50&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:40:09.274182" elapsed="0.000554"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.274900" elapsed="0.000191"/>
</kw>
<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="PASS" start="2026-04-25T23:40:09.270851" elapsed="0.004298"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:09.270542" elapsed="0.004650"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.276212" elapsed="0.000192"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.276910" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.276563" elapsed="0.000373"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.277090" elapsed="0.000221"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.278152" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:09.277822" elapsed="0.000356"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:40:09.278224" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:40:09.278380" level="INFO">${session_alias} = ClusterManagement__session_3</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:09.277504" elapsed="0.000902"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:40:09.278996" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.188:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a12330250&gt;, timeout=125, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:40:09.278560" elapsed="0.000545"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.279267" elapsed="0.000189"/>
</kw>
<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="PASS" start="2026-04-25T23:40:09.275472" elapsed="0.004043"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:09.275283" elapsed="0.004275"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-25T23:40:09.262843" elapsed="0.016746"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.280175" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</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-25T23:40:09.279778" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.280786" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.37', 2: '10.30.171.80', 3: '10.30.170.188'}</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-25T23:40:09.280382" elapsed="0.000447"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.281370" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</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-25T23:40:09.280990" 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-25T23:40:09.260835" elapsed="0.020635"/>
</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-25T23:40:09.251959" elapsed="0.029603"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:09.281772" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:09.281634" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.281612" elapsed="0.000241"/>
</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-25T23:40:09.285091" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:40:09.284699" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.285592" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:09.285282" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:40:09.285663" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T23:40:09.285840" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:40:09.284353" elapsed="0.001537"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:09.286931" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.286646" elapsed="0.000311"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.287828" 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-25T23:40:09.287939" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:09.287616" elapsed="0.000350"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:09.293288" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:09.290537" elapsed="0.002915"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.290516" elapsed="0.002966"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.293797" 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-25T23:40:09.293955" 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-25T23:40:09.293639" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.295098" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.37" 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-25T23:40:09.294142" elapsed="0.001005"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.295986" 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-25T23:40:09.295309" elapsed="0.000703"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.297418" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:09.297622" 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-25T23:40:09.296771" elapsed="0.000917"/>
</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-25T23:40:09.297992" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.300281" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:09.832488" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:04 UTC 2026

  System load:  0.06               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:40:09.299885" elapsed="0.532947"/>
</kw>
<msg time="2026-04-25T23:40:09.832944" 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="PASS" start="2026-04-25T23:40:09.298959" elapsed="0.534178"/>
</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="PASS" start="2026-04-25T23:40:09.296233" elapsed="0.537152"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.834002" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:40:09.846942" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:40:09.847116" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:09.847164" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:40:09.833648" elapsed="0.013541"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:09.847362" elapsed="0.000268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.848382" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:09.847870" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:09.848735" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:09.848527" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.848495" elapsed="0.000327"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:09.849018" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:40:09.848880" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.848863" elapsed="0.000247"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:09.849145" 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-25T23:40:09.852311" elapsed="0.000753"/>
</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-25T23:40:09.853289" elapsed="0.000449"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:09.853930" elapsed="0.000187"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:09.849485" elapsed="0.004737"/>
</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="PASS" start="2026-04-25T23:40:09.290039" elapsed="0.564278"/>
</kw>
<msg time="2026-04-25T23:40:09.854372" 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="PASS" start="2026-04-25T23:40:09.289159" elapsed="0.565269"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:09.288653" elapsed="0.565854"/>
</kw>
<msg time="2026-04-25T23:40:09.854549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:09.288126" elapsed="0.566479"/>
</kw>
<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-25T23:40:09.857562" elapsed="0.000360"/>
</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-25T23:40:09.858087" elapsed="0.000206"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:09.858446" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:09.854917" elapsed="0.003677"/>
</kw>
<msg time="2026-04-25T23:40:09.858702" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:09.287176" elapsed="0.571554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.859311" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:09.858912" elapsed="0.000441"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:09.859395" elapsed="0.000030"/>
</return>
<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="PASS" start="2026-04-25T23:40:09.286283" elapsed="0.573236"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:09.286098" elapsed="0.573494"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:09.860552" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:09.860276" elapsed="0.000302"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.861350" 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-25T23:40:09.861453" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:09.861203" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:09.864452" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:09.864139" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:09.864118" elapsed="0.000525"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.864954" 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-25T23:40:09.865085" 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-25T23:40:09.864814" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.866206" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.80" 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-25T23:40:09.865268" elapsed="0.000986"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.867077" level="INFO">${conn_id} = 4</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-25T23:40:09.866415" elapsed="0.000688"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:09.868423" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:09.868619" 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-25T23:40:09.867868" elapsed="0.000817"/>
</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-25T23:40:09.868965" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:09.871038" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:10.250214" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:06 UTC 2026

  System load:  0.33               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:40:09.870632" elapsed="0.379836"/>
</kw>
<msg time="2026-04-25T23:40:10.250596" 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="PASS" start="2026-04-25T23:40:09.869895" elapsed="0.380992"/>
</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="PASS" start="2026-04-25T23:40:09.867325" elapsed="0.383796"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.251661" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:40:10.264553" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:40:10.264977" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:10.265083" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:40:10.251357" elapsed="0.013782"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.265533" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.267849" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.266709" elapsed="0.001345"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:10.268596" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:10.268245" elapsed="0.000520"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.268186" elapsed="0.000643"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:10.269277" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-25T23:40:10.268973" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.268928" elapsed="0.000547"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:10.269553" elapsed="0.000032"/>
</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-25T23:40:10.276003" elapsed="0.000743"/>
</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-25T23:40:10.276977" elapsed="0.000420"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.277593" elapsed="0.000216"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:10.270398" elapsed="0.007494"/>
</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="PASS" start="2026-04-25T23:40:09.863616" elapsed="0.414371"/>
</kw>
<msg time="2026-04-25T23:40:10.278042" 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="PASS" start="2026-04-25T23:40:09.862775" elapsed="0.415321"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:09.862223" elapsed="0.415951"/>
</kw>
<msg time="2026-04-25T23:40:10.278215" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:09.861639" elapsed="0.416621"/>
</kw>
<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-25T23:40:10.281263" elapsed="0.000324"/>
</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-25T23:40:10.281780" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.282083" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:10.278586" elapsed="0.003646"/>
</kw>
<msg time="2026-04-25T23:40:10.282324" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:09.860824" elapsed="0.421548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.282837" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.282556" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:10.282922" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:40:09.859908" elapsed="0.423141"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:09.859719" elapsed="0.423368"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:10.284108" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:10.283815" elapsed="0.000319"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.284931" 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-25T23:40:10.285041" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.284788" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:10.287940" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:10.287550" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.287531" elapsed="0.000601"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.288476" 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-25T23:40:10.288604" 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-25T23:40:10.288300" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.289746" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.188" 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-25T23:40:10.288805" elapsed="0.000990"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.290693" 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-25T23:40:10.289955" elapsed="0.000767"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.292066" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:10.292270" 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-25T23:40:10.291478" elapsed="0.000841"/>
</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-25T23:40:10.292598" elapsed="0.000802"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.294949" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:10.622398" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:10.294524" elapsed="0.328021"/>
</kw>
<msg time="2026-04-25T23:40:10.622641" 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="PASS" start="2026-04-25T23:40:10.293756" elapsed="0.329059"/>
</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="PASS" start="2026-04-25T23:40:10.290947" elapsed="0.332084"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.623475" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:40:10.635995" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:40:10.636344" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:10.636444" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:40:10.623222" elapsed="0.013275"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.636918" elapsed="0.000495"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.638986" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.637850" elapsed="0.001242"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:10.639559" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:10.639251" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.639205" elapsed="0.000532"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:10.639987" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:40:10.639812" elapsed="0.000259"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.639791" elapsed="0.000313"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:10.640149" elapsed="0.000020"/>
</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-25T23:40:10.644385" elapsed="0.001005"/>
</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-25T23:40:10.645727" elapsed="0.000578"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.646620" elapsed="0.000312"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:10.640582" elapsed="0.006463"/>
</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="PASS" start="2026-04-25T23:40:10.287034" elapsed="0.360141"/>
</kw>
<msg time="2026-04-25T23:40:10.647302" 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="PASS" start="2026-04-25T23:40:10.286342" elapsed="0.361036"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:10.285817" elapsed="0.361671"/>
</kw>
<msg time="2026-04-25T23:40:10.647543" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:10.285229" elapsed="0.362378"/>
</kw>
<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-25T23:40:10.650610" elapsed="0.000348"/>
</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-25T23:40:10.651132" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.651435" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:10.647965" elapsed="0.003615"/>
</kw>
<msg time="2026-04-25T23:40:10.651698" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:10.284359" elapsed="0.367366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.652150" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.651901" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:10.652233" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:40:10.283382" elapsed="0.368974"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:10.283194" elapsed="0.369199"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:40:09.285953" elapsed="1.366475"/>
</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-25T23:40:09.282086" elapsed="1.370406"/>
</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-25T23:40:10.652651" elapsed="0.000230"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:10.667500" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:10.667390" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.667371" elapsed="0.000204"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.667888" 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-25T23:40:10.667995" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.667745" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.668436" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.668175" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:10.668893" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:10.668632" elapsed="0.000304"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:10.669762" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:40:10.669504" elapsed="0.000476">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-25T23:40:10.670090" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:40:10.670137" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:10.669096" elapsed="0.001064"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:10.670464" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:10.670235" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:10.670216" elapsed="0.000573"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:10.671696" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:10.671360" elapsed="0.000364"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:40:10.671774" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:40:10.671938" level="INFO">${odl_ip} = 10.30.171.37</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:10.671060" elapsed="0.000902"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:40:10.672118" elapsed="0.000404"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.672836" level="INFO">index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:40:10.672939" level="INFO">${karaf_connection_object} = index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.672716" elapsed="0.000248"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:10.673118" elapsed="0.002468"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:40:10.676036" level="INFO">Logging into '10.30.171.37:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:40:11.379685" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:40:10.675773" elapsed="0.704092"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:11.385776" 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-25T23:40:11.386285" elapsed="0.000181"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:11.386617" elapsed="0.000121"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:11.383235" elapsed="0.003559"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:11.380376" elapsed="0.006466"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:40:10.667107" elapsed="0.719787"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:10.653606" elapsed="0.733370"/>
</kw>
<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="PASS" start="2026-04-25T23:40:10.653241" elapsed="0.733789"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:10.653098" elapsed="0.733975"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:11.401305" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:11.401180" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:11.401154" elapsed="0.000231"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:11.401701" 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-25T23:40:11.401816" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:11.401544" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:11.402269" level="INFO">{1: 10}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:11.401998" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:11.402725" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:11.402466" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:11.403643" level="FAIL">Dictionary does not contain key '2'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:40:11.403385" elapsed="0.000448">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-04-25T23:40:11.403956" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:40:11.404003" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:11.403016" elapsed="0.001010"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:11.404331" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:11.404103" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:11.404084" elapsed="0.000347"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:11.405192" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:11.404923" elapsed="0.000296"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:40:11.405267" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:40:11.405425" level="INFO">${odl_ip} = 10.30.171.80</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:11.404634" elapsed="0.000815"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:40:11.405603" elapsed="0.000430"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:11.406328" level="INFO">index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:40:11.406430" level="INFO">${karaf_connection_object} = index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:11.406217" elapsed="0.000239"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:11.406606" elapsed="0.002639"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:40:11.409694" level="INFO">Logging into '10.30.171.80:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:40:12.082382" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:40:11.409413" elapsed="0.673160"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:12.086259" 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-25T23:40:12.086764" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:12.087086" elapsed="0.000103"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:12.083755" elapsed="0.003487"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:12.083031" elapsed="0.004285"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:40:11.400877" elapsed="0.686496"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:11.387742" elapsed="0.699678"/>
</kw>
<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="PASS" start="2026-04-25T23:40:11.387349" elapsed="0.700122"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:11.387195" elapsed="0.700317"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:12.101800" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:12.101663" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:12.101639" elapsed="0.000239"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:12.102175" 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-25T23:40:12.102285" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:12.102036" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:12.102747" level="INFO">{1: 10, 2: 12}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:12.102465" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:12.103213" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:12.102944" elapsed="0.000316"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:12.104090" level="FAIL">Dictionary does not contain key '3'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:40:12.103846" elapsed="0.000373">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-04-25T23:40:12.104333" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:40:12.104379" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:12.103459" elapsed="0.000943"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:12.104721" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:12.104478" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:12.104459" elapsed="0.000362"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:12.105787" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:12.105302" elapsed="0.000511"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:40:12.105864" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:40:12.106022" level="INFO">${odl_ip} = 10.30.170.188</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:12.105027" elapsed="0.001020"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:40:12.106203" elapsed="0.000409"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:12.106909" level="INFO">index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:40:12.107010" level="INFO">${karaf_connection_object} = index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:12.106799" elapsed="0.000237"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:40:12.107188" elapsed="0.002564"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:40:12.110185" level="INFO">Logging into '10.30.170.188:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:40:13.256426" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:40:12.109921" elapsed="1.146689"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:13.260388" 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-25T23:40:13.260973" elapsed="0.000230"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:13.261571" elapsed="0.000171"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:13.257858" elapsed="0.003962"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:13.257086" elapsed="0.004800"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:40:12.101365" elapsed="1.160594"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:12.088270" elapsed="1.173754"/>
</kw>
<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="PASS" start="2026-04-25T23:40:12.087892" elapsed="1.174205"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:12.087707" elapsed="1.174447"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-25T23:40:10.652939" elapsed="2.609266"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T23:40:09.251303" elapsed="4.010994"/>
</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-25T23:40:13.266084" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.265961" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.265938" elapsed="0.000222"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.271206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.271099" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.271081" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:40:13.272392" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:40:13.271934" elapsed="0.000487"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:13.272967" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:13.272587" elapsed="0.000406"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:40:13.273039" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:40:13.273218" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:40:13.271522" elapsed="0.001721"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.278886" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.278730" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.278710" elapsed="0.000247"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.280036" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.279926" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.279907" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:13.280545" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:13.280253" elapsed="0.000318"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.280961" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:40:13.280758" elapsed="0.000230"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.369623" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:40:13.281498" elapsed="0.088304"/>
</kw>
<msg time="2026-04-25T23:40:13.369934" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:40:13.369981" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.281151" elapsed="0.088867"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.520543" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:40:13.370623" elapsed="0.150692"/>
</kw>
<msg time="2026-04-25T23:40:13.521659" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:40:13.521825" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.370214" elapsed="0.151706"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.522865" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.522145" elapsed="0.000862"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.522084" elapsed="0.001201"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:13.524545" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:13.523722" elapsed="0.001107"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.525630" elapsed="0.000163"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.524985" elapsed="0.000894"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.524944" elapsed="0.000992"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:40:13.526019" elapsed="0.000074"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:13.528987" elapsed="0.000818"/>
</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-25T23:40:13.530114" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:13.530883" elapsed="0.000202"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:13.528145" elapsed="0.003073"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:13.526661" elapsed="0.004607"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:40:13.279637" elapsed="0.251731"/>
</kw>
<msg time="2026-04-25T23:40:13.531469" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:13.531516" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.279114" elapsed="0.252441"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:40:13.531780" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-04-25T23:40:13.531640" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.531619" elapsed="0.000258"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.532333" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.532723" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.532799" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:40:13.278419" elapsed="0.254491"/>
</kw>
<msg time="2026-04-25T23:40:13.533006" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:13.533051" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.273637" elapsed="0.259452"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.533424" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.533165" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.533148" elapsed="0.000356"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:13.273491" elapsed="0.260038"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.539285" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.539149" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.539127" elapsed="0.000309"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.540776" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.540646" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.540629" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:13.541295" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:13.540997" elapsed="0.000326"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.541717" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:40:13.541487" elapsed="0.000259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.630165" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:40:13.542253" elapsed="0.088177"/>
</kw>
<msg time="2026-04-25T23:40:13.630612" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:40:13.630662" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.541911" elapsed="0.088823"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.843984" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:40:13.631531" elapsed="0.212782"/>
</kw>
<msg time="2026-04-25T23:40:13.844485" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:40:13.844536" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.631040" elapsed="0.213535"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.845055" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.844725" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.844660" elapsed="0.000483"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:13.845700" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:13.845320" elapsed="0.000503"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.846140" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.845908" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.845887" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:40:13.846258" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:13.847691" elapsed="0.000606"/>
</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-25T23:40:13.848603" elapsed="0.000491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:13.849367" elapsed="0.000207"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:13.847233" elapsed="0.002542"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:13.846603" elapsed="0.003233"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:40:13.540387" elapsed="0.309581"/>
</kw>
<msg time="2026-04-25T23:40:13.850099" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:13.850159" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.539637" elapsed="0.310571"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:40:13.850505" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:40:13.850306" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.850282" elapsed="0.000339"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.851161" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.851783" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.851864" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:40:13.538783" elapsed="0.313193"/>
</kw>
<msg time="2026-04-25T23:40:13.852073" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:13.852119" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.533824" elapsed="0.318368"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:13.852534" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:13.852272" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.852254" elapsed="0.000360"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:13.533656" elapsed="0.318982"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.859041" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.858919" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.858898" elapsed="0.000232"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:40:13.860363" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:13.860246" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:13.860222" elapsed="0.000210"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:13.860905" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:13.860583" elapsed="0.000352"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.861319" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:40:13.861101" elapsed="0.000249"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:40:13.960974" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:40:13.861955" elapsed="0.099272"/>
</kw>
<msg time="2026-04-25T23:40:13.961397" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:40:13.961464" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.861519" elapsed="0.099984"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.094831" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:40:13.962254" elapsed="0.132848"/>
</kw>
<msg time="2026-04-25T23:40:14.095265" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:40:14.095312" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.961777" elapsed="0.133571"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:14.095825" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:14.095479" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.095445" elapsed="0.000469"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.096449" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "d "o "m "_ "d "a "t "a "_ "b "r "o "k "e "r "/ "r "e "s "t "a "r "t "_ "o "d "l "_ "w "i "t "h "_ "t "e "l "l "_ "b "a "s "e "d "_ "t "r "u "e ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:14.096059" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:14.096934" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:14.096709" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.096689" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:40:14.097052" elapsed="0.000046"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:40:14.098406" elapsed="0.000594"/>
</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-25T23:40:14.099300" elapsed="0.000477"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.100043" elapsed="0.000195"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:14.097970" elapsed="0.002415"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:40:14.097378" elapsed="0.003056"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:40:13.859936" elapsed="0.240619"/>
</kw>
<msg time="2026-04-25T23:40:14.100695" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:14.100747" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.859327" elapsed="0.241462"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:40:14.100976" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:40:14.100868" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.100850" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:14.101610" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:14.101967" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:40:14.102038" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:40:13.858547" elapsed="0.243599"/>
</kw>
<msg time="2026-04-25T23:40:14.102244" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:40:14.102290" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:40:13.852940" elapsed="0.249387"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:40:14.102654" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:14.102403" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.102386" elapsed="0.000362"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:13.852788" elapsed="0.249983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:40:13.273304" elapsed="0.829501"/>
</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-25T23:40:13.270806" elapsed="0.832058"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T23:40:13.263159" elapsed="0.839770"/>
</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-25T23:40:13.262524" elapsed="0.840449"/>
</kw>
<arg>http_timeout=125</arg>
<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-25T23:40:09.245107" elapsed="4.857919"/>
</kw>
<test id="s1-s1-t1" name="Stop_All_Members" line="30">
<kw name="Stop_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.109247" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:40:14.108811" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.109770" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:14.109440" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:40:14.109842" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:40:14.110001" level="INFO">${stop_index_list} = [1, 2, 3]</msg>
<var>${stop_index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:40:14.108316" elapsed="0.001757"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.111069" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:40:14.110686" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.111564" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:14.111258" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:40:14.111635" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:14.111808" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${original_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:40:14.110290" elapsed="0.001543"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.113326" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:40:14.112945" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.113839" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:14.113513" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:40:14.113910" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:14.114065" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:40:14.112554" elapsed="0.001536"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:14.115168" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:14.114896" elapsed="0.000298"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.116012" 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-25T23:40:14.116113" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.115842" elapsed="0.000298"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:14.119025" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:14.118738" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.118716" elapsed="0.000392"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.119395" 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-25T23:40:14.119497" 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-25T23:40:14.119259" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.120234" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/stop" on remote system "10.30.171.37" 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-25T23:40:14.119755" elapsed="0.000549"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.120909" 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-25T23:40:14.120469" elapsed="0.000467"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.122148" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:14.122273" 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-25T23:40:14.121595" elapsed="0.000703"/>
</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-25T23:40:14.122486" elapsed="0.000687"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.125370" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:14.445251" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:04 UTC 2026

  System load:  0.06               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:09 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:40:14.124796" elapsed="0.320710"/>
</kw>
<msg time="2026-04-25T23:40:14.445655" 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="PASS" start="2026-04-25T23:40:14.123461" elapsed="0.322417"/>
</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="PASS" start="2026-04-25T23:40:14.121157" elapsed="0.324904"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.446586" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/stop'.</msg>
<msg time="2026-04-25T23:40:14.803404" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:14.803840" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:14.803945" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:14.446312" elapsed="0.357686"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.804471" elapsed="0.000779"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.806471" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:14.805710" elapsed="0.000856"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:14.807108" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:14.806789" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.806736" elapsed="0.000532"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:14.807628" elapsed="0.000100"/>
</return>
<status status="PASS" start="2026-04-25T23:40:14.807385" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.807353" elapsed="0.000506"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:14.807936" elapsed="0.000033"/>
</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-25T23:40:14.829265" elapsed="0.000580"/>
</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-25T23:40:14.830019" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.830338" 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-25T23:40:14.808702" elapsed="0.021792"/>
</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="PASS" start="2026-04-25T23:40:14.118003" elapsed="0.712584"/>
</kw>
<msg time="2026-04-25T23:40:14.830643" 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="PASS" start="2026-04-25T23:40:14.117395" elapsed="0.713322"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:14.116852" elapsed="0.713949"/>
</kw>
<msg time="2026-04-25T23:40:14.830845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:14.116310" elapsed="0.714579"/>
</kw>
<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-25T23:40:14.834081" 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-25T23:40:14.834567" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.834881" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:14.831187" elapsed="0.003841"/>
</kw>
<msg time="2026-04-25T23:40:14.835119" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:14.115412" elapsed="0.719733"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.835654" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:14.835398" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:14.835759" elapsed="0.000031"/>
</return>
<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="PASS" start="2026-04-25T23:40:14.114467" elapsed="0.721418"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:14.114289" elapsed="0.721634"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:14.837263" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:14.836616" elapsed="0.000675"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.838092" 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-25T23:40:14.838191" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:14.837953" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:14.840933" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:14.840602" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:14.840583" elapsed="0.000431"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.841289" 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-25T23:40:14.841390" 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-25T23:40:14.841161" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.842069" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/stop" on remote system "10.30.171.80" 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-25T23:40:14.841567" elapsed="0.000549"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.842715" level="INFO">${conn_id} = 22</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-25T23:40:14.842274" elapsed="0.000469"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:14.844224" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:14.844350" 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-25T23:40:14.843690" elapsed="0.000685"/>
</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-25T23:40:14.844564" elapsed="0.000881"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:14.847540" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:15.198654" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:06 UTC 2026

  System load:  0.33               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:10 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:40:14.846984" elapsed="0.351952"/>
</kw>
<msg time="2026-04-25T23:40:15.199078" 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="PASS" start="2026-04-25T23:40:14.845707" elapsed="0.353562"/>
</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="PASS" start="2026-04-25T23:40:14.842963" elapsed="0.356491"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.200022" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/stop'.</msg>
<msg time="2026-04-25T23:40:15.589901" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:15.590277" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:15.590378" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:15.199737" elapsed="0.390695"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:15.591070" elapsed="0.000654"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:15.592908" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:15.592157" elapsed="0.000848"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:15.593538" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:15.593231" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:15.593179" elapsed="0.000551"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:15.594090" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-25T23:40:15.593855" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:15.593817" elapsed="0.000467"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:15.594358" elapsed="0.000031"/>
</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-25T23:40:15.614372" elapsed="0.000596"/>
</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-25T23:40:15.615141" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:15.615461" elapsed="0.000110"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:15.595092" elapsed="0.020535"/>
</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="PASS" start="2026-04-25T23:40:14.840060" elapsed="0.775676"/>
</kw>
<msg time="2026-04-25T23:40:15.615795" 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="PASS" start="2026-04-25T23:40:14.839451" elapsed="0.776409"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:14.838910" elapsed="0.777038"/>
</kw>
<msg time="2026-04-25T23:40:15.615991" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:14.838383" elapsed="0.777653"/>
</kw>
<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-25T23:40:15.619155" 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-25T23:40:15.619636" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:15.619951" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:15.616336" elapsed="0.003763"/>
</kw>
<msg time="2026-04-25T23:40:15.620191" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:14.837512" elapsed="0.782704"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:15.620692" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:15.620418" elapsed="0.000318"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:15.620787" elapsed="0.000030"/>
</return>
<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="PASS" start="2026-04-25T23:40:14.836202" elapsed="0.784712"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:14.836019" elapsed="0.784933"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:15.622702" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:15.622410" elapsed="0.000320"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.623630" 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-25T23:40:15.623748" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:15.623491" elapsed="0.000283"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:15.626765" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:15.626449" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:15.626429" elapsed="0.000476"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.627185" 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-25T23:40:15.627287" 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-25T23:40:15.627058" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:15.627974" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/stop" on remote system "10.30.170.188" 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-25T23:40:15.627475" elapsed="0.000546"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.628596" 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-25T23:40:15.628180" elapsed="0.000442"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:15.629901" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:15.630033" 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-25T23:40:15.629316" elapsed="0.000742"/>
</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-25T23:40:15.630250" elapsed="0.000731"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.633297" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:15.951354" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:10 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:15.632653" elapsed="0.319002"/>
</kw>
<msg time="2026-04-25T23:40:15.951823" 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="PASS" start="2026-04-25T23:40:15.631222" elapsed="0.320771"/>
</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="PASS" start="2026-04-25T23:40:15.628857" elapsed="0.323305"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:15.952687" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/stop'.</msg>
<msg time="2026-04-25T23:40:16.320213" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:16.320643" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:40:16.320879" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:15.952406" elapsed="0.368564"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.321498" elapsed="0.000660"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.323301" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:16.322572" elapsed="0.000833"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:16.323985" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:16.323604" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.323553" elapsed="0.000595"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:16.324497" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-25T23:40:16.324264" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.324231" elapsed="0.000494"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:16.324806" elapsed="0.000033"/>
</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-25T23:40:16.343598" elapsed="0.000571"/>
</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-25T23:40:16.344351" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.344694" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:16.325636" elapsed="0.019217"/>
</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="PASS" start="2026-04-25T23:40:15.625897" elapsed="0.719051"/>
</kw>
<msg time="2026-04-25T23:40:16.345071" 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="PASS" start="2026-04-25T23:40:15.625239" elapsed="0.719894"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:15.624658" elapsed="0.720558"/>
</kw>
<msg time="2026-04-25T23:40:16.345259" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:15.623931" elapsed="0.721377"/>
</kw>
<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-25T23:40:16.348587" elapsed="0.000351"/>
</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-25T23:40:16.349106" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.349400" elapsed="0.000129"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:16.345704" elapsed="0.003878"/>
</kw>
<msg time="2026-04-25T23:40:16.349687" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:15.622956" elapsed="0.726758"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.350345" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:16.349963" elapsed="0.000438"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:16.350460" elapsed="0.000040"/>
</return>
<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="PASS" start="2026-04-25T23:40:15.621269" elapsed="0.729361"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:15.621074" elapsed="0.729816"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:40:14.114149" elapsed="2.236794"/>
</for>
<arg>command=${NODE_STOP_COMMAND}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:40:14.112042" elapsed="2.238986"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.351706" level="INFO">${updated_index_list} = [1, 2, 3]</msg>
<var>${updated_index_list}</var>
<arg>@{index_list}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:40:16.351252" elapsed="0.000492"/>
</kw>
<kw name="Remove Values From List" owner="Collections">
<arg>${updated_index_list}</arg>
<arg>@{stop_index_list}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:40:16.351961" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="not ${confirm}">
<return>
<value>${updated_index_list}</value>
<status status="NOT RUN" start="2026-04-25T23:40:16.352519" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:16.352371" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.352344" elapsed="0.000265"/>
</if>
<for flavor="IN">
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.355189" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:16.354888" elapsed="0.000328"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:16.356176" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:16.355903" elapsed="0.000300"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:16.357020" 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-25T23:40:16.357122" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.356879" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:16.363023" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:16.362538" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.362482" elapsed="0.000685"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:16.364623" 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-25T23:40:16.364914" 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-25T23:40:16.364175" elapsed="0.000838"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.366596" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.37" 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-25T23:40:16.366038" elapsed="0.000735"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:16.368482" level="INFO">${conn_id} = 28</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-25T23:40:16.367771" elapsed="0.000815"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.371719" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:16.371835" 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-25T23:40:16.371296" elapsed="0.000574"/>
</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-25T23:40:16.372173" elapsed="0.000474"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:16.374379" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:16.682211" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:04 UTC 2026

  System load:  0.06               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:14 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:40:16.373918" elapsed="0.308455"/>
</kw>
<msg time="2026-04-25T23:40:16.682461" 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="PASS" start="2026-04-25T23:40:16.373327" elapsed="0.309225"/>
</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="PASS" start="2026-04-25T23:40:16.370153" elapsed="0.312746"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:16.684627" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:16.707533" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:16.708236" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:16.708622" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:16.684195" elapsed="0.024719"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.711569" elapsed="0.001193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.715373" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:16.714315" elapsed="0.001321"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:16.716779" elapsed="0.000080"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:16.716057" elapsed="0.000915"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.715917" elapsed="0.001213"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:16.718229" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-25T23:40:16.717510" elapsed="0.000829"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:16.717387" elapsed="0.001017"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:16.718490" elapsed="0.000042"/>
</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-25T23:40:16.723687" elapsed="0.000366"/>
</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-25T23:40:16.724276" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.724650" elapsed="0.000120"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:16.720039" elapsed="0.004852"/>
</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="PASS" start="2026-04-25T23:40:16.359106" elapsed="0.366070"/>
</kw>
<msg time="2026-04-25T23:40:16.725546" 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="PASS" start="2026-04-25T23:40:16.358418" elapsed="0.367238"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:16.357864" elapsed="0.367899"/>
</kw>
<msg time="2026-04-25T23:40:16.725867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:16.357306" elapsed="0.368609"/>
</kw>
<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-25T23:40:16.729298" elapsed="0.000336"/>
</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-25T23:40:16.729820" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:16.730139" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:16.726225" elapsed="0.004103"/>
</kw>
<msg time="2026-04-25T23:40:16.730435" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:16.356422" elapsed="0.374039"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.730944" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:16.730687" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:16.731032" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:40:16.731193" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:16.355417" elapsed="0.375808"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:16.731279" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:40:16.731430" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:16.354436" elapsed="0.377018"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:16.732084" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:16.731614" elapsed="0.000562">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:16.353917" elapsed="0.378390">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:18.736206" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:18.735432" elapsed="0.000842"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:18.738332" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:18.737720" elapsed="0.000672"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:18.740214" 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-25T23:40:18.740439" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:18.739892" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:18.745788" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:18.745298" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:18.745239" elapsed="0.000691"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:18.747611" 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-25T23:40:18.747876" 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-25T23:40:18.746946" elapsed="0.001033"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:18.749520" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.37" 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-25T23:40:18.748974" elapsed="0.000661"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:18.751352" 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-25T23:40:18.750624" elapsed="0.000827"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:18.753812" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:18.753950" 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-25T23:40:18.753506" elapsed="0.000469"/>
</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-25T23:40:18.754188" elapsed="0.000331"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:18.755476" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:19.076209" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:04 UTC 2026

  System load:  0.06               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:16 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:40:18.755150" elapsed="0.321226"/>
</kw>
<msg time="2026-04-25T23:40:19.076462" 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="PASS" start="2026-04-25T23:40:18.754787" elapsed="0.321771"/>
</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="PASS" start="2026-04-25T23:40:18.752659" elapsed="0.324220"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.078365" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:19.101501" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:19.102077" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-25T23:40:19.102417" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:19.077970" elapsed="0.024659"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.104949" elapsed="0.000938"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.108216" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.107216" elapsed="0.001232"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.109342" elapsed="0.000070"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:19.108835" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.108706" elapsed="0.000934"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:19.110444" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-04-25T23:40:19.109994" elapsed="0.000815"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.109886" elapsed="0.001132"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.111202" elapsed="0.000089"/>
</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-25T23:40:19.118284" elapsed="0.000486"/>
</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-25T23:40:19.119110" elapsed="0.000228"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.119607" elapsed="0.000163"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.113512" elapsed="0.006425"/>
</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="PASS" start="2026-04-25T23:40:18.743916" elapsed="0.376308"/>
</kw>
<msg time="2026-04-25T23:40:19.120527" 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="PASS" start="2026-04-25T23:40:18.743199" elapsed="0.377386"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:18.742166" elapsed="0.378499"/>
</kw>
<msg time="2026-04-25T23:40:19.120722" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:18.740882" elapsed="0.379888"/>
</kw>
<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-25T23:40:19.123846" 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-25T23:40:19.124322" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.124693" elapsed="0.000106"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.121062" elapsed="0.003789"/>
</kw>
<msg time="2026-04-25T23:40:19.124945" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:18.738939" elapsed="0.386035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.125397" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.125151" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:19.125481" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:19.125633" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:18.736768" elapsed="0.388889"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:19.125745" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:40:19.125893" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:18.734529" elapsed="0.391388"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:40:19.126075" elapsed="0.000363"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:18.733193" elapsed="0.393307"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:16.353090" elapsed="2.773457"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:40:16.352889" elapsed="2.773695"/>
</iter>
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.128493" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:19.128196" elapsed="0.000323"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:19.129418" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:19.129145" elapsed="0.000299"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.130244" 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-25T23:40:19.130344" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.130112" elapsed="0.000258"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:19.134171" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:19.133743" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.133688" elapsed="0.000621"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.135913" 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-25T23:40:19.136155" 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-25T23:40:19.135296" elapsed="0.000959"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.137781" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.171.80" 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-25T23:40:19.137225" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.139946" level="INFO">${conn_id} = 34</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-25T23:40:19.139101" elapsed="0.000944"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.142371" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:19.142448" 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-25T23:40:19.142086" elapsed="0.000386"/>
</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-25T23:40:19.142926" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.144274" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:19.467601" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:06 UTC 2026

  System load:  0.33               Processes:             124
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:15 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:40:19.143946" elapsed="0.323944"/>
</kw>
<msg time="2026-04-25T23:40:19.468016" 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="PASS" start="2026-04-25T23:40:19.143534" elapsed="0.324607"/>
</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="PASS" start="2026-04-25T23:40:19.141311" elapsed="0.327201"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.470469" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:19.493355" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:19.493691" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-25T23:40:19.493901" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:19.469954" elapsed="0.024071"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.495363" elapsed="0.000586"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.497297" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.496705" elapsed="0.000723"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.497977" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:19.497640" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.497562" elapsed="0.000596"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:19.498610" elapsed="0.000106"/>
</return>
<status status="PASS" start="2026-04-25T23:40:19.498345" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.498282" elapsed="0.000581"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.498971" elapsed="0.000068"/>
</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-25T23:40:19.505437" elapsed="0.000460"/>
</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-25T23:40:19.506175" elapsed="0.000216"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.506644" elapsed="0.000296"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.500750" elapsed="0.006354"/>
</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="PASS" start="2026-04-25T23:40:19.132381" elapsed="0.375007"/>
</kw>
<msg time="2026-04-25T23:40:19.507804" 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="PASS" start="2026-04-25T23:40:19.131734" elapsed="0.376151"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:19.131091" elapsed="0.376900"/>
</kw>
<msg time="2026-04-25T23:40:19.508044" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:19.130526" elapsed="0.377577"/>
</kw>
<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-25T23:40:19.512221" elapsed="0.000408"/>
</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-25T23:40:19.512868" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.513254" elapsed="0.000119"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.508490" elapsed="0.004949"/>
</kw>
<msg time="2026-04-25T23:40:19.513555" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:19.129659" elapsed="0.383927"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.514228" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.513930" elapsed="0.000349"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:19.514329" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:40:19.514508" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:19.128737" elapsed="0.385798"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:19.514590" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:19.514833" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:19.127839" elapsed="0.387026"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:40:19.515084" elapsed="0.000464"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.127427" elapsed="0.388208"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:19.126883" elapsed="0.388835"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:40:19.126700" elapsed="0.389068"/>
</iter>
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.518241" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:19.517857" elapsed="0.000419"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:19.519459" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:19.519116" elapsed="0.000376"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.520518" 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-25T23:40:19.520644" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.520331" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:19.525020" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:19.524548" elapsed="0.000552"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.524493" elapsed="0.000667"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.526804" 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-25T23:40:19.527083" 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-25T23:40:19.526143" elapsed="0.001042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.528793" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:19.528159" elapsed="0.000744"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.530569" 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-25T23:40:19.529881" elapsed="0.000783"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.533299" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:19.533377" 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-25T23:40:19.533008" 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-25T23:40:19.533615" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.535007" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:19.845582" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:15 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:19.534557" elapsed="0.311309"/>
</kw>
<msg time="2026-04-25T23:40:19.845970" 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="PASS" start="2026-04-25T23:40:19.534194" elapsed="0.311871"/>
</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="PASS" start="2026-04-25T23:40:19.532020" elapsed="0.314334"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:19.847925" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:19.870521" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:19.871078" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:19.871463" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:19.847494" elapsed="0.024223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.874099" elapsed="0.000933"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.877331" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.876338" elapsed="0.001228"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.878465" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:19.877955" elapsed="0.000681"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.877829" elapsed="0.000968"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:19.879642" elapsed="0.000264"/>
</return>
<status status="PASS" start="2026-04-25T23:40:19.879117" elapsed="0.000864"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:19.879010" elapsed="0.001029"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:19.880117" elapsed="0.000037"/>
</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-25T23:40:19.884882" elapsed="0.000346"/>
</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-25T23:40:19.885442" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.885822" 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-25T23:40:19.881425" elapsed="0.004604"/>
</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="PASS" start="2026-04-25T23:40:19.523169" elapsed="0.363085"/>
</kw>
<msg time="2026-04-25T23:40:19.886566" 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="PASS" start="2026-04-25T23:40:19.522282" elapsed="0.364343"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:19.521576" elapsed="0.365145"/>
</kw>
<msg time="2026-04-25T23:40:19.886763" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:19.520907" elapsed="0.365902"/>
</kw>
<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-25T23:40:19.889956" 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-25T23:40:19.890436" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:19.890751" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:19.887100" elapsed="0.003807"/>
</kw>
<msg time="2026-04-25T23:40:19.891003" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:19.519794" elapsed="0.371235"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.891527" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:19.891262" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:19.891616" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:40:19.891931" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:19.518535" elapsed="0.373421"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:19.892004" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:40:19.892153" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:19.517329" elapsed="0.374849"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:19.892863" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:19.892419" elapsed="0.000536">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:19.516815" elapsed="0.376278">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:21.897070" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:21.896169" elapsed="0.000976"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:21.899484" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:21.898826" elapsed="0.000724"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:21.901515" 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-25T23:40:21.901899" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:21.901189" elapsed="0.000750"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:21.909022" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:21.907894" elapsed="0.001244"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:21.907728" elapsed="0.001496"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:21.911513" 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-25T23:40:21.911985" 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-25T23:40:21.910880" elapsed="0.001258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:21.914052" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:21.913451" elapsed="0.000720"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:21.916070" level="INFO">${conn_id} = 40</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-25T23:40:21.915231" elapsed="0.000941"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:21.918551" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:21.918633" 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-25T23:40:21.918254" elapsed="0.000405"/>
</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-25T23:40:21.918893" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:21.920228" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:22.231233" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:21.919899" elapsed="0.311482"/>
</kw>
<msg time="2026-04-25T23:40:22.231462" 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="PASS" start="2026-04-25T23:40:21.919465" elapsed="0.312085"/>
</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="PASS" start="2026-04-25T23:40:21.917431" elapsed="0.314432"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:22.233375" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:22.256205" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:22.256808" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:22.257181" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:22.232978" elapsed="0.024418"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:22.259657" elapsed="0.000981"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:22.262336" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:22.261656" elapsed="0.000837"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:22.263150" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:22.262812" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:22.262659" elapsed="0.000678"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:22.263837" elapsed="0.000073"/>
</return>
<status status="PASS" start="2026-04-25T23:40:22.263535" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:22.263469" elapsed="0.000589"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:22.264169" elapsed="0.000053"/>
</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-25T23:40:22.270823" elapsed="0.000510"/>
</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-25T23:40:22.271629" elapsed="0.000241"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:22.272143" elapsed="0.000137"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:22.266093" elapsed="0.006374"/>
</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="PASS" start="2026-04-25T23:40:21.905038" elapsed="0.367778"/>
</kw>
<msg time="2026-04-25T23:40:22.273243" 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="PASS" start="2026-04-25T23:40:21.903869" elapsed="0.369430"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:21.902993" elapsed="0.370386"/>
</kw>
<msg time="2026-04-25T23:40:22.273420" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:21.902196" elapsed="0.371269"/>
</kw>
<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-25T23:40:22.276689" 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-25T23:40:22.277184" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:22.277478" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:22.273823" elapsed="0.003802"/>
</kw>
<msg time="2026-04-25T23:40:22.277746" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:21.900104" elapsed="0.377669"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:22.278202" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:22.277951" elapsed="0.000295"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:22.278288" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:22.278441" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:21.897664" elapsed="0.380803"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:22.278513" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:40:22.278658" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:21.895263" elapsed="0.383500"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:22.279337" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:22.278924" elapsed="0.000490">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:21.894035" elapsed="0.385493">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.283523" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:24.282722" elapsed="0.000870"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:24.286116" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:24.285222" elapsed="0.000993"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:24.288511" 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-25T23:40:24.288797" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:24.288132" elapsed="0.000732"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:24.295809" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:24.294958" elapsed="0.000971"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:24.294489" elapsed="0.001570"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:24.298157" 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-25T23:40:24.298499" 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-25T23:40:24.297482" elapsed="0.001156"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.300931" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:24.300142" elapsed="0.000956"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:24.303298" 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-25T23:40:24.302386" elapsed="0.001010"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.305851" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:24.305932" 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-25T23:40:24.305448" elapsed="0.000508"/>
</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-25T23:40:24.306203" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:24.307793" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:24.669337" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:22 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:24.307390" elapsed="0.362142"/>
</kw>
<msg time="2026-04-25T23:40:24.669716" 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="PASS" start="2026-04-25T23:40:24.306987" elapsed="0.362856"/>
</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="PASS" start="2026-04-25T23:40:24.304644" elapsed="0.365588"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:24.671956" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:24.695081" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:24.695843" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:24.696349" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:24.671524" elapsed="0.025071"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:24.698904" elapsed="0.000947"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.702185" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:24.701118" elapsed="0.001319"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:24.703487" elapsed="0.000074"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:24.702842" elapsed="0.000861"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:24.702706" elapsed="0.001139"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:24.704852" elapsed="0.000140"/>
</return>
<status status="PASS" start="2026-04-25T23:40:24.704208" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:24.704072" elapsed="0.001180"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:24.705443" elapsed="0.000090"/>
</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-25T23:40:24.710721" elapsed="0.000359"/>
</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-25T23:40:24.711298" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:24.711685" 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-25T23:40:24.707169" elapsed="0.004733"/>
</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="PASS" start="2026-04-25T23:40:24.292335" elapsed="0.419793"/>
</kw>
<msg time="2026-04-25T23:40:24.712443" 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="PASS" start="2026-04-25T23:40:24.291315" elapsed="0.421194"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:24.290504" elapsed="0.422087"/>
</kw>
<msg time="2026-04-25T23:40:24.712632" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:24.289280" elapsed="0.423441"/>
</kw>
<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-25T23:40:24.715757" elapsed="0.000328"/>
</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-25T23:40:24.716252" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:24.716549" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:24.713029" elapsed="0.003793"/>
</kw>
<msg time="2026-04-25T23:40:24.716919" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:24.286878" elapsed="0.430066"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.717411" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:24.717150" elapsed="0.000305"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:24.717498" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:40:24.717657" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:24.284248" elapsed="0.433477"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:24.717775" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:40:24.717924" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:24.281765" elapsed="0.436183"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:24.718522" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:24.718108" elapsed="0.000495">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:24.280360" elapsed="0.438386">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:26.722245" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:26.721468" elapsed="0.000846"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:26.724025" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:26.723623" elapsed="0.000442"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:26.725205" 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-25T23:40:26.725457" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:26.724992" elapsed="0.000504"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:26.732430" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:26.731956" elapsed="0.000554"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:26.730068" elapsed="0.002501"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:26.734017" 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-25T23:40:26.734259" 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-25T23:40:26.733550" elapsed="0.000807"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:26.735899" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:26.735340" elapsed="0.000671"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:26.737782" level="INFO">${conn_id} = 46</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-25T23:40:26.736996" elapsed="0.000884"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:26.740317" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:26.740394" 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-25T23:40:26.740030" elapsed="0.000388"/>
</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-25T23:40:26.740636" elapsed="0.000363"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:26.742088" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:27.050314" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:24 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:26.741578" elapsed="0.308875"/>
</kw>
<msg time="2026-04-25T23:40:27.050535" 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="PASS" start="2026-04-25T23:40:26.741221" elapsed="0.309398"/>
</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="PASS" start="2026-04-25T23:40:26.739248" elapsed="0.311707"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:27.052441" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:27.064878" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:27.065398" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:27.065817" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:27.052049" elapsed="0.013990"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:27.068308" elapsed="0.000885"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:27.071589" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:27.070462" elapsed="0.001400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:27.072493" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:27.072170" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:27.072087" elapsed="0.000614"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:27.073192" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-25T23:40:27.072909" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:27.072841" elapsed="0.000573"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:27.073525" elapsed="0.000052"/>
</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-25T23:40:27.079937" 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-25T23:40:27.080535" elapsed="0.000179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:27.080911" 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-25T23:40:27.075494" elapsed="0.005630"/>
</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="PASS" start="2026-04-25T23:40:26.728219" elapsed="0.353132"/>
</kw>
<msg time="2026-04-25T23:40:27.081662" 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="PASS" start="2026-04-25T23:40:26.727287" elapsed="0.354447"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:26.726472" elapsed="0.355343"/>
</kw>
<msg time="2026-04-25T23:40:27.081856" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:26.725746" elapsed="0.356156"/>
</kw>
<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-25T23:40:27.085058" 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-25T23:40:27.085534" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:27.085847" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:27.082194" elapsed="0.003801"/>
</kw>
<msg time="2026-04-25T23:40:27.086085" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:26.724374" elapsed="0.361737"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:27.086534" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:27.086287" elapsed="0.000291"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:27.086620" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:27.086832" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:26.722869" elapsed="0.363988"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:27.086938" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:40:27.087087" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:26.720604" elapsed="0.366507"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:27.087688" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:27.087274" elapsed="0.000493">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:26.719528" elapsed="0.368349">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.091312" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:29.090549" elapsed="0.000833"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:29.093466" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:29.092863" elapsed="0.000663"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:29.095317" 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-25T23:40:29.095542" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:29.094991" elapsed="0.000610"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:29.101339" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:29.100633" elapsed="0.000921"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:29.100550" elapsed="0.001109"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:29.104182" 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-25T23:40:29.104467" 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-25T23:40:29.103179" elapsed="0.001387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.106086" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:29.105530" elapsed="0.000667"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:29.108127" 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-25T23:40:29.107325" elapsed="0.000900"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.110504" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:29.110581" 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-25T23:40:29.110218" 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-25T23:40:29.110836" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:29.112123" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:29.413221" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:27 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:29.111777" elapsed="0.301619"/>
</kw>
<msg time="2026-04-25T23:40:29.413477" 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="PASS" start="2026-04-25T23:40:29.111399" elapsed="0.302166"/>
</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="PASS" start="2026-04-25T23:40:29.109438" elapsed="0.304419"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:29.415323" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:29.437967" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:29.438474" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:29.438868" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:29.414938" elapsed="0.024149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:29.441457" elapsed="0.000910"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.444761" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:29.443629" elapsed="0.001375"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:29.445895" elapsed="0.000066"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:29.445361" elapsed="0.000702"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:29.445237" elapsed="0.000957"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:29.446997" elapsed="0.000112"/>
</return>
<status status="PASS" start="2026-04-25T23:40:29.446514" elapsed="0.000706"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:29.446406" elapsed="0.000943"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:29.447523" elapsed="0.000081"/>
</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-25T23:40:29.453325" 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-25T23:40:29.453889" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:29.454244" 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-25T23:40:29.449893" elapsed="0.004556"/>
</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="PASS" start="2026-04-25T23:40:29.098650" elapsed="0.356033"/>
</kw>
<msg time="2026-04-25T23:40:29.455088" 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="PASS" start="2026-04-25T23:40:29.097645" elapsed="0.357519"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:29.096874" elapsed="0.358394"/>
</kw>
<msg time="2026-04-25T23:40:29.455316" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:29.096055" elapsed="0.359307"/>
</kw>
<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-25T23:40:29.458460" 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-25T23:40:29.458950" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:29.459250" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:29.455664" elapsed="0.003735"/>
</kw>
<msg time="2026-04-25T23:40:29.459490" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:29.094048" elapsed="0.365467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.460090" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:29.459786" elapsed="0.000352"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:29.460181" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:29.460338" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:29.091875" elapsed="0.368492"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:29.460415" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:40:29.460559" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:29.089738" elapsed="0.370846"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:29.461167" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:29.460757" elapsed="0.000487">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:29.088657" elapsed="0.372700">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.465046" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:31.464253" elapsed="0.000937"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:31.466849" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:31.466445" elapsed="0.000442"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:31.468094" 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-25T23:40:31.468236" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:31.467845" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:31.473890" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:31.473208" elapsed="0.000793"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:31.473078" elapsed="0.001011"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:31.475817" 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-25T23:40:31.476072" 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-25T23:40:31.475116" elapsed="0.001058"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.477767" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:31.477199" elapsed="0.000679"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:31.479635" level="INFO">${conn_id} = 52</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-25T23:40:31.478937" elapsed="0.000815"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.482156" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:31.482236" 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-25T23:40:31.481869" 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-25T23:40:31.482475" elapsed="0.000354"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:31.483753" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:31.790699" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:29 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:31.483414" elapsed="0.307421"/>
</kw>
<msg time="2026-04-25T23:40:31.790916" 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="PASS" start="2026-04-25T23:40:31.483052" elapsed="0.307951"/>
</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="PASS" start="2026-04-25T23:40:31.481016" elapsed="0.310256"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:31.792794" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:31.815883" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:31.816384" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:31.816766" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:31.792372" elapsed="0.024605"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:31.819262" elapsed="0.000928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.822514" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:31.821542" elapsed="0.001235"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:31.823622" elapsed="0.000241"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:31.823127" elapsed="0.000846"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:31.823005" elapsed="0.001091"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:31.824890" elapsed="0.000112"/>
</return>
<status status="PASS" start="2026-04-25T23:40:31.824412" elapsed="0.000699"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:31.824306" elapsed="0.000938"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:31.825484" elapsed="0.000084"/>
</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-25T23:40:31.830728" elapsed="0.000335"/>
</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-25T23:40:31.831275" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:31.831631" elapsed="0.000142"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:31.827309" elapsed="0.004572"/>
</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="PASS" start="2026-04-25T23:40:31.471177" elapsed="0.360926"/>
</kw>
<msg time="2026-04-25T23:40:31.832412" 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="PASS" start="2026-04-25T23:40:31.470121" elapsed="0.362348"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:31.469339" elapsed="0.363212"/>
</kw>
<msg time="2026-04-25T23:40:31.832592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:31.468509" elapsed="0.364129"/>
</kw>
<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-25T23:40:31.835856" 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-25T23:40:31.836347" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:31.836642" elapsed="0.000115"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:31.833004" elapsed="0.003805"/>
</kw>
<msg time="2026-04-25T23:40:31.836900" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:31.467191" elapsed="0.369734"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.837386" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:31.837101" elapsed="0.000333"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:31.837476" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:31.837629" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:31.465658" elapsed="0.371996"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:31.837725" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:40:31.837879" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:31.463356" elapsed="0.374547"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:31.838456" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:31.838061" elapsed="0.000471">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:31.462239" elapsed="0.376404">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:33.842218" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:33.841365" elapsed="0.000925"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:33.844409" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:33.843803" elapsed="0.000666"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:33.846289" 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-25T23:40:33.846566" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:33.845951" elapsed="0.000675"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:33.853445" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:33.852976" elapsed="0.000549"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:33.852919" elapsed="0.000667"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:33.855422" 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-25T23:40:33.855705" 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-25T23:40:33.854729" elapsed="0.001083"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:33.857349" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:33.856802" elapsed="0.000658"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:33.859209" 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-25T23:40:33.858484" elapsed="0.000904"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:33.864150" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:33.864229" 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-25T23:40:33.863863" 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-25T23:40:33.864466" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:33.865803" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:34.179065" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:31 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:33.865463" elapsed="0.313771"/>
</kw>
<msg time="2026-04-25T23:40:34.179321" 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="PASS" start="2026-04-25T23:40:33.865101" elapsed="0.314312"/>
</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="PASS" start="2026-04-25T23:40:33.862244" elapsed="0.317488"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:34.181264" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:34.203771" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:34.204274" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:34.204604" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:34.180843" elapsed="0.024015"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:34.207075" elapsed="0.000911"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:34.210234" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:34.209245" elapsed="0.001218"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:34.211378" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:34.210871" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:34.210743" elapsed="0.000959"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:34.212468" elapsed="0.000118"/>
</return>
<status status="PASS" start="2026-04-25T23:40:34.212026" elapsed="0.000863"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:34.211920" elapsed="0.001106"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:34.213203" elapsed="0.000083"/>
</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-25T23:40:34.219239" elapsed="0.000344"/>
</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-25T23:40:34.219813" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:34.220177" 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-25T23:40:34.215797" elapsed="0.004589"/>
</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="PASS" start="2026-04-25T23:40:33.851181" elapsed="0.369427"/>
</kw>
<msg time="2026-04-25T23:40:34.220976" 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="PASS" start="2026-04-25T23:40:33.849514" elapsed="0.371524"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:33.848205" elapsed="0.372916"/>
</kw>
<msg time="2026-04-25T23:40:34.221162" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:33.847021" elapsed="0.374187"/>
</kw>
<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-25T23:40:34.224208" 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-25T23:40:34.224790" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:34.225090" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:34.221505" elapsed="0.003730"/>
</kw>
<msg time="2026-04-25T23:40:34.225453" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:33.844988" elapsed="0.380492"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:34.225943" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:34.225688" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:34.226030" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:34.226183" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:33.842844" elapsed="0.383364"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:34.226256" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:34.226401" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:33.840526" elapsed="0.385900"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:34.227023" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:34.226600" elapsed="0.000502">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:33.839441" elapsed="0.387780">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.231594" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:36.230812" elapsed="0.000852"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:36.233776" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:36.233118" elapsed="0.000720"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:36.235859" 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-25T23:40:36.236092" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:36.235396" elapsed="0.000755"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:36.240326" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:36.239608" elapsed="0.000800"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:36.239537" elapsed="0.000933"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:36.241936" 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-25T23:40:36.242184" 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-25T23:40:36.241474" elapsed="0.000811"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.243888" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:36.243314" elapsed="0.000687"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:36.245707" level="INFO">${conn_id} = 58</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-25T23:40:36.244990" elapsed="0.000816"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.248164" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:36.248241" 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-25T23:40:36.247883" 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-25T23:40:36.248483" elapsed="0.000355"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:36.249769" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:36.607232" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:34 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:36.249430" elapsed="0.358074"/>
</kw>
<msg time="2026-04-25T23:40:36.607590" 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="PASS" start="2026-04-25T23:40:36.249061" elapsed="0.358648"/>
</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="PASS" start="2026-04-25T23:40:36.247075" elapsed="0.360935"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:36.609509" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:36.632367" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:36.632939" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:36.633278" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:36.609112" elapsed="0.024383"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:36.636721" elapsed="0.001093"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.640358" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:36.639249" elapsed="0.001215"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:36.640907" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:36.640635" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:36.640576" elapsed="0.000478"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:36.641414" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:40:36.641198" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:36.641149" elapsed="0.000425"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:36.641655" elapsed="0.000100"/>
</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-25T23:40:36.646625" elapsed="0.000356"/>
</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-25T23:40:36.647234" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:36.647599" elapsed="0.000118"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:36.643091" elapsed="0.004758"/>
</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="PASS" start="2026-04-25T23:40:36.238187" elapsed="0.409888"/>
</kw>
<msg time="2026-04-25T23:40:36.648441" 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="PASS" start="2026-04-25T23:40:36.237485" elapsed="0.411016"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:36.236947" elapsed="0.411636"/>
</kw>
<msg time="2026-04-25T23:40:36.648624" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:36.236406" elapsed="0.412278"/>
</kw>
<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-25T23:40:36.651952" 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-25T23:40:36.652435" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:36.652750" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:36.649016" elapsed="0.003883"/>
</kw>
<msg time="2026-04-25T23:40:36.652990" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:36.234323" elapsed="0.418699"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.653452" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:36.653200" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:36.653538" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:36.653790" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:36.232169" elapsed="0.421649"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:36.653866" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:36.654013" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:36.229900" elapsed="0.424137"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:36.654646" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:36.654242" elapsed="0.000497">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:36.228748" elapsed="0.426113">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:38.658592" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:38.657801" elapsed="0.000862"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:38.660818" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:38.660131" elapsed="0.000753"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:38.662206" 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-25T23:40:38.662350" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:38.661983" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:38.669176" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:38.667969" elapsed="0.001350"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:38.667868" elapsed="0.001533"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:38.671438" 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-25T23:40:38.671774" 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-25T23:40:38.670854" elapsed="0.001043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:38.673648" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:38.673062" elapsed="0.000724"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:38.675537" 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-25T23:40:38.674840" elapsed="0.000796"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:38.677954" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:38.678031" 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-25T23:40:38.677650" elapsed="0.000405"/>
</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-25T23:40:38.678267" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:38.679714" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:39.019500" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:36 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:38.679343" elapsed="0.340316"/>
</kw>
<msg time="2026-04-25T23:40:39.019760" 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="PASS" start="2026-04-25T23:40:38.678953" elapsed="0.340899"/>
</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="PASS" start="2026-04-25T23:40:38.676876" elapsed="0.343258"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:39.021655" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:39.044529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:39.045133" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:39.045475" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:39.021257" elapsed="0.024467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:39.047988" elapsed="0.000896"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:39.051196" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:39.050215" elapsed="0.001217"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:39.052327" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:39.051823" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:39.051659" elapsed="0.000968"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:39.053448" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:40:39.053048" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:39.052875" elapsed="0.000737"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:39.053758" elapsed="0.000040"/>
</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-25T23:40:39.058464" elapsed="0.000349"/>
</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-25T23:40:39.059022" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:39.059376" 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-25T23:40:39.055097" elapsed="0.004483"/>
</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="PASS" start="2026-04-25T23:40:38.665545" elapsed="0.394274"/>
</kw>
<msg time="2026-04-25T23:40:39.060123" 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="PASS" start="2026-04-25T23:40:38.664406" elapsed="0.395774"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:38.663508" elapsed="0.396751"/>
</kw>
<msg time="2026-04-25T23:40:39.060299" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:38.662632" elapsed="0.397711"/>
</kw>
<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-25T23:40:39.063455" elapsed="0.000334"/>
</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-25T23:40:39.063954" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:39.064248" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:39.060635" elapsed="0.003764"/>
</kw>
<msg time="2026-04-25T23:40:39.064489" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:38.661358" elapsed="0.403155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:39.064962" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:39.064710" elapsed="0.000321"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:39.065074" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:39.065227" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:38.659163" elapsed="0.406089"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:39.065305" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:40:39.065477" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:38.656940" elapsed="0.408561"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:39.066158" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:39.065663" elapsed="0.000571">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:38.655781" elapsed="0.410569">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.070563" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:41.069413" elapsed="0.001215"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:41.072516" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:41.072024" elapsed="0.000540"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:41.074394" 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-25T23:40:41.074575" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:41.074112" elapsed="0.000510"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:41.083837" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:41.083205" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:41.080502" elapsed="0.003509"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:41.086076" 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-25T23:40:41.086383" 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-25T23:40:41.085405" elapsed="0.001099"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.088422" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:41.087736" elapsed="0.000823"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:41.091270" level="INFO">${conn_id} = 64</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-25T23:40:41.089827" elapsed="0.001566"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.093866" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:41.093948" 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-25T23:40:41.093545" elapsed="0.000427"/>
</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-25T23:40:41.094212" elapsed="0.000344"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:41.095486" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:41.411530" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:38 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:41.095160" elapsed="0.316545"/>
</kw>
<msg time="2026-04-25T23:40:41.411788" 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="PASS" start="2026-04-25T23:40:41.094798" elapsed="0.317082"/>
</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="PASS" start="2026-04-25T23:40:41.092735" elapsed="0.319429"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:41.413693" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:41.436779" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:41.437095" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:41.437303" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:41.413273" elapsed="0.024167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:41.438876" elapsed="0.000583"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.440917" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:41.440258" elapsed="0.000804"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:41.441705" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:41.441285" elapsed="0.000531"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:41.441207" elapsed="0.000687"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:41.442392" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-25T23:40:41.442095" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:41.442028" elapsed="0.000588"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:41.442770" elapsed="0.000054"/>
</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-25T23:40:41.476055" elapsed="0.000403"/>
</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-25T23:40:41.476708" elapsed="0.000179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:41.477088" 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-25T23:40:41.444713" elapsed="0.032594"/>
</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="PASS" start="2026-04-25T23:40:41.078201" elapsed="0.399339"/>
</kw>
<msg time="2026-04-25T23:40:41.477882" 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="PASS" start="2026-04-25T23:40:41.076962" elapsed="0.400986"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:41.075945" elapsed="0.402087"/>
</kw>
<msg time="2026-04-25T23:40:41.478073" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:41.074959" elapsed="0.403161"/>
</kw>
<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-25T23:40:41.481507" 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-25T23:40:41.482007" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:41.482342" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:41.478557" elapsed="0.003940"/>
</kw>
<msg time="2026-04-25T23:40:41.482592" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:41.073245" elapsed="0.409372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.483095" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:41.482837" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:41.483185" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:40:41.483343" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:41.071208" elapsed="0.412160"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:41.483414" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:40:41.483558" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:41.068379" elapsed="0.415204"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:41.484155" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:41.483758" elapsed="0.000469">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:41.067222" elapsed="0.417115">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.488064" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:43.487190" elapsed="0.000946"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:43.489613" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:43.489226" elapsed="0.000426"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:43.490831" 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-25T23:40:43.491097" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:43.490582" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:43.497476" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:43.496533" elapsed="0.001027"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:43.496449" elapsed="0.001173"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:43.499125" 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-25T23:40:43.499403" 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-25T23:40:43.498637" elapsed="0.000869"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.501130" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:43.500518" elapsed="0.000732"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:43.503015" 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-25T23:40:43.502265" elapsed="0.000851"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.505587" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:43.505668" 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-25T23:40:43.505294" elapsed="0.000416"/>
</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-25T23:40:43.505924" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:43.507313" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:43.866726" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:41 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:43.506944" elapsed="0.359927"/>
</kw>
<msg time="2026-04-25T23:40:43.866954" 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="PASS" start="2026-04-25T23:40:43.506520" elapsed="0.360519"/>
</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="PASS" start="2026-04-25T23:40:43.504487" elapsed="0.362835"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:43.868906" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:43.891285" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:43.891870" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:43.892209" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:43.868466" elapsed="0.023954"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:43.894710" elapsed="0.000880"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.897950" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:43.896925" elapsed="0.001258"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:43.899071" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:43.898527" elapsed="0.000712"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:43.898405" elapsed="0.000956"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:43.900220" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-04-25T23:40:43.899768" elapsed="0.000675"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:43.899625" elapsed="0.000916"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:43.900621" elapsed="0.000037"/>
</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-25T23:40:43.905393" elapsed="0.000378"/>
</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-25T23:40:43.906045" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:43.906405" 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-25T23:40:43.902049" elapsed="0.004566"/>
</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="PASS" start="2026-04-25T23:40:43.494356" elapsed="0.412538"/>
</kw>
<msg time="2026-04-25T23:40:43.907206" 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="PASS" start="2026-04-25T23:40:43.493063" elapsed="0.414202"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:43.492240" elapsed="0.415107"/>
</kw>
<msg time="2026-04-25T23:40:43.907389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:43.491433" elapsed="0.416034"/>
</kw>
<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-25T23:40:43.910545" 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-25T23:40:43.911040" elapsed="0.000196"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:43.911389" elapsed="0.000114"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:43.907786" elapsed="0.003770"/>
</kw>
<msg time="2026-04-25T23:40:43.911647" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:43.489989" elapsed="0.421700"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.912125" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:43.911874" elapsed="0.000295"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:43.912212" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:43.912365" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:43.488598" elapsed="0.423793"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:43.912439" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:43.912586" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:43.486304" elapsed="0.426307"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:43.913190" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:43.912798" elapsed="0.000463">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:43.485194" elapsed="0.428175">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:45.917258" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:45.916266" elapsed="0.001074"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:45.919617" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:45.918988" elapsed="0.000731"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:45.921657" 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-25T23:40:45.921791" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:45.921440" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:45.926283" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:45.925701" elapsed="0.000733"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:45.925619" elapsed="0.000881"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:45.928051" 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-25T23:40:45.928302" 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-25T23:40:45.927558" elapsed="0.000844"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:45.930163" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:45.929572" elapsed="0.000702"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:45.932044" level="INFO">${conn_id} = 70</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-25T23:40:45.931305" elapsed="0.000837"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:45.934710" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:45.934795" 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-25T23:40:45.934389" elapsed="0.000431"/>
</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-25T23:40:45.935036" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:45.936433" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:46.282240" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:43 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:45.936102" elapsed="0.346271"/>
</kw>
<msg time="2026-04-25T23:40:46.282455" 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="PASS" start="2026-04-25T23:40:45.935602" elapsed="0.346938"/>
</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="PASS" start="2026-04-25T23:40:45.933586" elapsed="0.349251"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:46.284304" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:46.308438" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:46.309190" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:46.309528" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:46.283920" elapsed="0.025800"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:46.311228" elapsed="0.000669"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:46.313418" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:46.312770" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:46.314167" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:46.313828" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:46.313744" elapsed="0.000612"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:46.314975" elapsed="0.000082"/>
</return>
<status status="PASS" start="2026-04-25T23:40:46.314579" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:46.314508" elapsed="0.000697"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:46.315319" elapsed="0.000052"/>
</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-25T23:40:46.321265" elapsed="0.000352"/>
</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-25T23:40:46.321852" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:46.322223" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:46.317477" elapsed="0.004961"/>
</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="PASS" start="2026-04-25T23:40:45.923993" elapsed="0.398674"/>
</kw>
<msg time="2026-04-25T23:40:46.323076" 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="PASS" start="2026-04-25T23:40:45.923265" elapsed="0.399879"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:45.922524" elapsed="0.400704"/>
</kw>
<msg time="2026-04-25T23:40:46.323270" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:45.921989" elapsed="0.401329"/>
</kw>
<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-25T23:40:46.326439" elapsed="0.000348"/>
</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-25T23:40:46.326954" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:46.327316" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:46.323617" elapsed="0.003857"/>
</kw>
<msg time="2026-04-25T23:40:46.327567" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:45.920235" elapsed="0.407358"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:46.328093" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:46.327837" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:46.328182" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:46.328340" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:45.917966" elapsed="0.410400"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:46.328415" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:46.328563" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:45.915341" elapsed="0.413248"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:46.329243" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:46.328800" elapsed="0.000521">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:45.914243" elapsed="0.415221">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.333047" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:48.332272" elapsed="0.000846"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:48.335222" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:48.334555" elapsed="0.000736"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:48.337107" 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-25T23:40:48.337337" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:48.336783" elapsed="0.000615"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:48.343726" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:48.343059" elapsed="0.000778"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:48.342981" elapsed="0.000941"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:48.346046" 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-25T23:40:48.346444" 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-25T23:40:48.345304" elapsed="0.001304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.348203" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:48.347647" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:48.350161" 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-25T23:40:48.349365" elapsed="0.000895"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.352536" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:48.352613" 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-25T23:40:48.352246" 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-25T23:40:48.352866" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:48.354265" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:48.673837" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:46 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:48.353938" elapsed="0.320043"/>
</kw>
<msg time="2026-04-25T23:40:48.674058" 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="PASS" start="2026-04-25T23:40:48.353421" elapsed="0.320720"/>
</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="PASS" start="2026-04-25T23:40:48.351464" elapsed="0.322946"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:48.675896" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:48.698301" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:48.698864" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:48.699195" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:48.675492" elapsed="0.023912"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:48.701600" elapsed="0.000950"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.704053" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:48.703414" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:48.704765" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:48.704422" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:48.704343" elapsed="0.000611"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:48.705435" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-25T23:40:48.705154" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:48.705087" elapsed="0.000567"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:48.705787" elapsed="0.000055"/>
</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-25T23:40:48.712135" 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-25T23:40:48.712692" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:48.713052" 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-25T23:40:48.707650" elapsed="0.005609"/>
</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="PASS" start="2026-04-25T23:40:48.340785" elapsed="0.372693"/>
</kw>
<msg time="2026-04-25T23:40:48.713798" 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="PASS" start="2026-04-25T23:40:48.339823" elapsed="0.374033"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:48.338939" elapsed="0.375026"/>
</kw>
<msg time="2026-04-25T23:40:48.714008" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:48.337872" elapsed="0.376183"/>
</kw>
<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-25T23:40:48.717248" elapsed="0.000314"/>
</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-25T23:40:48.717985" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:48.718295" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:48.714418" elapsed="0.004025"/>
</kw>
<msg time="2026-04-25T23:40:48.718534" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:48.335813" elapsed="0.382747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.719016" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:48.718764" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:48.719103" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:48.719338" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:48.333578" elapsed="0.385786"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:48.719413" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:48.719560" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:48.331430" elapsed="0.388155"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:48.720188" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:48.719782" elapsed="0.000479">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:48.330353" elapsed="0.390018">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:50.724038" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:50.723419" elapsed="0.000667"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:50.725467" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:50.725046" elapsed="0.000460"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:50.726659" 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-25T23:40:50.726828" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:50.726436" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:50.732633" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:50.732155" elapsed="0.000575"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:50.732084" elapsed="0.000708"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:50.734270" 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-25T23:40:50.734526" 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-25T23:40:50.733807" elapsed="0.000819"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:50.736237" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:50.735681" elapsed="0.000665"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:50.738048" level="INFO">${conn_id} = 76</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-25T23:40:50.737331" elapsed="0.000816"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:50.741754" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:50.741943" 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-25T23:40:50.741058" elapsed="0.000942"/>
</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-25T23:40:50.742508" elapsed="0.001303"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:50.744747" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:51.057906" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:48 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:50.744403" elapsed="0.313676"/>
</kw>
<msg time="2026-04-25T23:40:51.058162" 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="PASS" start="2026-04-25T23:40:50.744038" elapsed="0.314218"/>
</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="PASS" start="2026-04-25T23:40:50.739425" elapsed="0.319118"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:51.060099" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:51.082824" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:51.083417" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:51.083808" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:51.059699" elapsed="0.024323"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:51.086289" elapsed="0.000946"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:51.089518" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:51.088501" elapsed="0.001285"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:51.090770" elapsed="0.000101"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:51.090138" elapsed="0.000853"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:51.090014" elapsed="0.001170"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:51.091850" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:40:51.091539" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:51.091430" elapsed="0.000580"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:51.092265" elapsed="0.000038"/>
</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-25T23:40:51.097122" elapsed="0.000335"/>
</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-25T23:40:51.097686" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:51.098049" 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-25T23:40:51.093617" elapsed="0.004642"/>
</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="PASS" start="2026-04-25T23:40:50.729808" elapsed="0.368677"/>
</kw>
<msg time="2026-04-25T23:40:51.098834" 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="PASS" start="2026-04-25T23:40:50.728652" elapsed="0.370241"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:50.727895" elapsed="0.371080"/>
</kw>
<msg time="2026-04-25T23:40:51.099016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:50.727126" elapsed="0.371935"/>
</kw>
<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-25T23:40:51.102085" elapsed="0.000378"/>
</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-25T23:40:51.102635" elapsed="0.000257"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:51.103044" elapsed="0.000119"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:51.099370" elapsed="0.003846"/>
</kw>
<msg time="2026-04-25T23:40:51.103371" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:50.725844" elapsed="0.377553"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:51.103852" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:51.103580" elapsed="0.000317"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:51.103940" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:51.104125" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:50.724427" elapsed="0.379727"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:51.104204" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:40:51.104352" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:50.722377" elapsed="0.381999"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:51.104961" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:51.104533" elapsed="0.000504">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:50.721226" elapsed="0.383950">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.109343" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:53.108416" elapsed="0.001003"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:53.111927" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:53.111141" elapsed="0.000858"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:53.113694" 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-25T23:40:53.113803" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:53.113466" elapsed="0.000364"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:53.118949" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:53.118416" elapsed="0.000614"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:53.117998" elapsed="0.001094"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:53.120564" 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-25T23:40:53.120828" 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-25T23:40:53.120100" elapsed="0.000826"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.122587" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:53.122013" elapsed="0.000711"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:53.124686" 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-25T23:40:53.123914" elapsed="0.000871"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.127188" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:53.127266" 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-25T23:40:53.126897" 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-25T23:40:53.127563" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:53.129105" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:53.439238" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:51 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:53.128774" elapsed="0.310721"/>
</kw>
<msg time="2026-04-25T23:40:53.439582" 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="PASS" start="2026-04-25T23:40:53.128398" elapsed="0.311294"/>
</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="PASS" start="2026-04-25T23:40:53.126117" elapsed="0.313858"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:53.441530" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:53.463990" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:53.464563" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:53.465051" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:53.441114" elapsed="0.024153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:53.467492" elapsed="0.000947"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.470774" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:53.469787" elapsed="0.001221"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:53.471896" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:53.471357" elapsed="0.000711"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:53.471236" elapsed="0.000957"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:53.473063" elapsed="0.000113"/>
</return>
<status status="PASS" start="2026-04-25T23:40:53.472541" elapsed="0.000747"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:53.472434" elapsed="0.000983"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:53.473594" elapsed="0.000233"/>
</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-25T23:40:53.480236" elapsed="0.000368"/>
</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-25T23:40:53.480861" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:53.481226" 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-25T23:40:53.476772" elapsed="0.004663"/>
</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="PASS" start="2026-04-25T23:40:53.116272" elapsed="0.365384"/>
</kw>
<msg time="2026-04-25T23:40:53.482036" 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="PASS" start="2026-04-25T23:40:53.115332" elapsed="0.366762"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:53.114664" elapsed="0.367512"/>
</kw>
<msg time="2026-04-25T23:40:53.482217" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:53.113998" elapsed="0.368265"/>
</kw>
<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-25T23:40:53.485433" elapsed="0.000415"/>
</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-25T23:40:53.486017" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:53.486317" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:53.482556" elapsed="0.003909"/>
</kw>
<msg time="2026-04-25T23:40:53.486556" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:53.112860" elapsed="0.373721"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.487050" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:53.486793" elapsed="0.000303"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:53.487138" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:53.487294" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:53.110021" elapsed="0.377299"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:53.487367" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:40:53.487514" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:53.107356" elapsed="0.380183"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:53.488175" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:53.487768" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:53.106122" elapsed="0.382257">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.492202" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:55.491359" elapsed="0.000917"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:55.494219" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:55.493811" elapsed="0.000446"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:55.495404" 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-25T23:40:55.495545" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:55.495179" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:55.501307" elapsed="0.000099"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:55.500634" elapsed="0.000841"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:55.500274" elapsed="0.001286"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:55.503138" 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-25T23:40:55.503389" 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-25T23:40:55.502662" elapsed="0.000826"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.505063" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:55.504494" elapsed="0.000680"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:55.506961" level="INFO">${conn_id} = 82</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-25T23:40:55.506187" elapsed="0.000887"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.509396" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:55.509475" 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-25T23:40:55.509089" elapsed="0.000410"/>
</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-25T23:40:55.509729" elapsed="0.000332"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:55.511148" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:55.830315" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:53 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:55.510643" elapsed="0.319834"/>
</kw>
<msg time="2026-04-25T23:40:55.830567" 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="PASS" start="2026-04-25T23:40:55.510285" elapsed="0.320375"/>
</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="PASS" start="2026-04-25T23:40:55.508306" elapsed="0.322751"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:55.833102" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:55.855874" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:55.856427" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:55.856840" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:55.832546" elapsed="0.024527"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:55.859429" elapsed="0.000923"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.862765" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:55.861783" elapsed="0.001131"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:55.863472" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:55.863144" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:55.863061" elapsed="0.000603"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:55.864173" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-25T23:40:55.863892" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:55.863825" elapsed="0.000575"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:55.864516" elapsed="0.000052"/>
</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-25T23:40:55.872625" elapsed="0.000373"/>
</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-25T23:40:55.873215" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:55.873602" elapsed="0.000210"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:55.866504" elapsed="0.007421"/>
</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="PASS" start="2026-04-25T23:40:55.498298" elapsed="0.375852"/>
</kw>
<msg time="2026-04-25T23:40:55.874459" 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="PASS" start="2026-04-25T23:40:55.497321" elapsed="0.377198"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:55.496549" elapsed="0.378050"/>
</kw>
<msg time="2026-04-25T23:40:55.874639" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:55.495830" elapsed="0.378869"/>
</kw>
<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-25T23:40:55.877906" elapsed="0.000322"/>
</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-25T23:40:55.878399" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:55.878715" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:55.875019" elapsed="0.003849"/>
</kw>
<msg time="2026-04-25T23:40:55.878960" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:55.494563" elapsed="0.384422"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.879432" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:55.879175" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:55.879520" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:40:55.879692" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:55.492803" elapsed="0.386916"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:55.879767" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T23:40:55.879929" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:55.490418" elapsed="0.389536"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:55.880517" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:55.880112" elapsed="0.000482">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:55.489239" elapsed="0.391518">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:40:57.884334" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:40:57.883578" elapsed="0.000824"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:40:57.886740" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:40:57.886035" elapsed="0.000769"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:57.888303" 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-25T23:40:57.888457" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:40:57.888079" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:40:57.894297" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:40:57.893598" elapsed="0.000818"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:57.893514" elapsed="0.000992"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:57.896667" 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-25T23:40:57.896947" 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-25T23:40:57.895987" elapsed="0.001062"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:57.898602" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:40:57.898031" elapsed="0.000700"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:40:57.900413" level="INFO">${conn_id} = 85</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-25T23:40:57.899710" elapsed="0.000816"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:40:57.902914" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:40:57.902994" 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-25T23:40:57.902606" elapsed="0.000413"/>
</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-25T23:40:57.903236" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:40:57.904539" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:40:58.202711" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:55 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:40:57.904191" elapsed="0.298696"/>
</kw>
<msg time="2026-04-25T23:40:58.202973" 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="PASS" start="2026-04-25T23:40:57.903820" elapsed="0.299242"/>
</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="PASS" start="2026-04-25T23:40:57.901809" elapsed="0.301535"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:40:58.204849" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:40:58.227323" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:40:58.227877" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:40:58.228217" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:40:58.204442" elapsed="0.023986"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:58.230715" elapsed="0.000940"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:58.234010" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:58.232976" elapsed="0.001269"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:58.235268" elapsed="0.000072"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:40:58.234591" elapsed="0.000852"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:58.234470" elapsed="0.001101"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:40:58.236385" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-04-25T23:40:58.235932" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-04-25T23:40:58.235820" elapsed="0.000982"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:40:58.236988" elapsed="0.000084"/>
</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-25T23:40:58.243421" elapsed="0.000354"/>
</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-25T23:40:58.243991" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:58.244350" 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-25T23:40:58.240058" elapsed="0.004502"/>
</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="PASS" start="2026-04-25T23:40:57.891495" elapsed="0.353316"/>
</kw>
<msg time="2026-04-25T23:40:58.245114" 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="PASS" start="2026-04-25T23:40:57.890404" elapsed="0.354766"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:40:57.889545" elapsed="0.355709"/>
</kw>
<msg time="2026-04-25T23:40:58.245295" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:40:57.888779" elapsed="0.356562"/>
</kw>
<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-25T23:40:58.248437" 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-25T23:40:58.248946" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:40:58.249241" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:40:58.245637" elapsed="0.003752"/>
</kw>
<msg time="2026-04-25T23:40:58.249482" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:40:57.887297" elapsed="0.362210"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:40:58.249995" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:40:58.249743" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:40:58.250082" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:40:58.250247" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:40:57.885049" elapsed="0.365229"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:40:58.250333" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:40:58.250480" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:40:57.882758" elapsed="0.367748"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:40:58.251132" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:40:58.250686" elapsed="0.000520">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:40:57.881614" elapsed="0.369703">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.254868" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:00.254093" elapsed="0.000846"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:00.256961" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:00.256404" elapsed="0.000593"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:00.258284" 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-25T23:41:00.258545" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:00.257907" elapsed="0.000676"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:00.263982" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:00.263286" elapsed="0.000808"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:00.263210" elapsed="0.000967"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:00.266043" 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-25T23:41:00.266287" 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-25T23:41:00.265366" elapsed="0.001020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.268110" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:00.267519" elapsed="0.000702"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:00.269935" level="INFO">${conn_id} = 88</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-25T23:41:00.269212" elapsed="0.000822"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.272401" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:00.272481" 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-25T23:41:00.272116" elapsed="0.000390"/>
</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-25T23:41:00.272748" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:00.274025" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:00.583325" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:58 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:00.273697" elapsed="0.309786"/>
</kw>
<msg time="2026-04-25T23:41:00.583570" 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="PASS" start="2026-04-25T23:41:00.273319" elapsed="0.310342"/>
</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="PASS" start="2026-04-25T23:41:00.271302" elapsed="0.312704"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:00.585528" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:00.608224" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:00.608779" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:00.609116" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:00.585130" elapsed="0.024194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:00.611563" elapsed="0.001032"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.614871" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:00.613880" elapsed="0.001226"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:00.616134" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:00.615453" elapsed="0.000852"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:00.615330" elapsed="0.001099"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:00.617227" elapsed="0.000120"/>
</return>
<status status="PASS" start="2026-04-25T23:41:00.616780" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:00.616641" elapsed="0.000946"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:00.617799" elapsed="0.000083"/>
</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-25T23:41:00.624404" elapsed="0.000360"/>
</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-25T23:41:00.625043" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:00.625409" 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-25T23:41:00.621018" elapsed="0.004602"/>
</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="PASS" start="2026-04-25T23:41:00.261330" elapsed="0.364538"/>
</kw>
<msg time="2026-04-25T23:41:00.626182" 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="PASS" start="2026-04-25T23:41:00.260386" elapsed="0.365857"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:00.259595" elapsed="0.366730"/>
</kw>
<msg time="2026-04-25T23:41:00.626367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:00.258850" elapsed="0.367563"/>
</kw>
<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-25T23:41:00.629517" 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-25T23:41:00.630012" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:00.630376" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:00.626726" elapsed="0.003806"/>
</kw>
<msg time="2026-04-25T23:41:00.630626" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:00.257306" elapsed="0.373346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.631102" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:00.630850" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:00.631188" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:00.631341" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:00.255402" elapsed="0.375964"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:00.631414" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:41:00.631558" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:00.253244" elapsed="0.378338"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:00.632234" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:00.631799" elapsed="0.000513">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:00.252183" elapsed="0.380244">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.635943" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:02.635174" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:02.638091" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:02.637447" elapsed="0.000705"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:02.640055" 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-25T23:41:02.640289" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:02.639581" elapsed="0.000767"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:02.645972" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:02.645306" elapsed="0.000866"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:02.645226" elapsed="0.001034"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:02.648564" 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-25T23:41:02.648933" 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-25T23:41:02.647644" elapsed="0.001481"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.650993" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:02.650428" elapsed="0.000676"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:02.652787" level="INFO">${conn_id} = 91</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-25T23:41:02.652078" elapsed="0.000807"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.655189" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:02.655269" 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-25T23:41:02.654903" 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-25T23:41:02.655506" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:02.656795" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:02.963440" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:00 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:02.656452" elapsed="0.307154"/>
</kw>
<msg time="2026-04-25T23:41:02.963718" 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="PASS" start="2026-04-25T23:41:02.656089" elapsed="0.307731"/>
</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="PASS" start="2026-04-25T23:41:02.654130" elapsed="0.309988"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:02.965783" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:02.978376" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:02.978963" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:02.979305" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:02.965325" elapsed="0.014195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:02.981869" elapsed="0.000923"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.985142" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:02.984093" elapsed="0.001375"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:02.986195" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:02.985889" elapsed="0.000386"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:02.985747" elapsed="0.000587"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:02.986699" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:41:02.986481" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:02.986433" elapsed="0.000428"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:02.986940" elapsed="0.000036"/>
</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-25T23:41:02.991961" elapsed="0.000348"/>
</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-25T23:41:02.992526" elapsed="0.000188"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:02.992913" 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-25T23:41:02.988335" elapsed="0.004790"/>
</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="PASS" start="2026-04-25T23:41:02.643336" elapsed="0.350035"/>
</kw>
<msg time="2026-04-25T23:41:02.993764" 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="PASS" start="2026-04-25T23:41:02.642378" elapsed="0.351449"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:02.641610" elapsed="0.352302"/>
</kw>
<msg time="2026-04-25T23:41:02.993954" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:02.640763" elapsed="0.353238"/>
</kw>
<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-25T23:41:02.997102" elapsed="0.000359"/>
</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-25T23:41:02.997627" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:02.997981" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:02.994299" elapsed="0.003833"/>
</kw>
<msg time="2026-04-25T23:41:02.998226" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:02.638640" elapsed="0.359612"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.998715" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:02.998436" elapsed="0.000326"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:02.998805" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:02.998970" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:02.636473" elapsed="0.362523"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:02.999044" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:02.999210" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:02.634337" elapsed="0.364898"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:02.999906" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:02.999395" elapsed="0.000590">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:02.633303" elapsed="0.366797">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.003652" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:05.002899" elapsed="0.000851"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:05.005905" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:05.005257" elapsed="0.000709"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:05.007793" 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-25T23:41:05.008022" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:05.007430" elapsed="0.000650"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:05.013799" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:05.013072" elapsed="0.000809"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:05.013012" elapsed="0.000935"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:05.015431" 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-25T23:41:05.015709" 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-25T23:41:05.014963" elapsed="0.000868"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.017439" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:05.016858" elapsed="0.000691"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:05.019373" level="INFO">${conn_id} = 94</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-25T23:41:05.018646" elapsed="0.000826"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.021856" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:05.021938" 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-25T23:41:05.021547" elapsed="0.000415"/>
</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-25T23:41:05.022175" elapsed="0.000365"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:05.023568" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:05.326697" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:40:07 UTC 2026

  System load:  0.29               Processes:             123
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:02 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:05.023243" elapsed="0.303602"/>
</kw>
<msg time="2026-04-25T23:41:05.326930" 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="PASS" start="2026-04-25T23:41:05.022777" elapsed="0.304239"/>
</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="PASS" start="2026-04-25T23:41:05.020780" elapsed="0.306518"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:05.328912" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:05.351307" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:05.351992" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:05.352440" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:05.328476" elapsed="0.024261"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:05.355269" elapsed="0.000682"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.357408" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:05.356776" elapsed="0.000779"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:05.358138" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:05.357804" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:05.357724" elapsed="0.000603"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:05.358883" elapsed="0.000078"/>
</return>
<status status="PASS" start="2026-04-25T23:41:05.358571" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:05.358498" elapsed="0.000616"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:05.359225" elapsed="0.000052"/>
</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-25T23:41:05.366149" elapsed="0.000546"/>
</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-25T23:41:05.366988" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:05.367353" 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-25T23:41:05.361159" elapsed="0.006405"/>
</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="PASS" start="2026-04-25T23:41:05.011698" elapsed="0.356146"/>
</kw>
<msg time="2026-04-25T23:41:05.368157" 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="PASS" start="2026-04-25T23:41:05.010967" elapsed="0.357253"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:05.009629" elapsed="0.358674"/>
</kw>
<msg time="2026-04-25T23:41:05.368344" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:05.008437" elapsed="0.359952"/>
</kw>
<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-25T23:41:05.371646" elapsed="0.000373"/>
</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-25T23:41:05.372187" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:05.372489" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:05.368847" elapsed="0.003792"/>
</kw>
<msg time="2026-04-25T23:41:05.372771" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:05.006472" elapsed="0.366326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.373289" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:05.372990" elapsed="0.000350"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:05.373384" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:41:05.373546" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:05.004213" elapsed="0.369358"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:05.373618" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:05.373786" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:05.002023" elapsed="0.371788"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:05.374384" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:05.373980" elapsed="0.000515">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:05.000974" elapsed="0.373636">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:07.378269" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:07.377451" elapsed="0.000892"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:07.380596" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:07.379941" elapsed="0.000719"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:07.382597" 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-25T23:41:07.382871" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:07.382257" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:07.387948" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:07.387448" elapsed="0.000581"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:07.387141" elapsed="0.000951"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:07.389538" 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-25T23:41:07.389806" 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-25T23:41:07.389092" elapsed="0.000822"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:07.391482" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:07.390911" elapsed="0.000683"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:07.393298" level="INFO">${conn_id} = 97</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-25T23:41:07.392585" elapsed="0.000813"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:07.395828" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:07.395906" 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-25T23:41:07.395513" elapsed="0.000416"/>
</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-25T23:41:07.396147" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:07.397482" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:07.954363" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:05 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:07.397157" elapsed="0.557399"/>
</kw>
<msg time="2026-04-25T23:41:07.954643" 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="PASS" start="2026-04-25T23:41:07.396787" elapsed="0.557988"/>
</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="PASS" start="2026-04-25T23:41:07.394606" elapsed="0.560495"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:07.956948" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:07.979176" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:07.979909" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:07.980180" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:07.956505" elapsed="0.023826"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:07.981887" elapsed="0.001093"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:07.985583" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:07.984436" elapsed="0.001466"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:07.986909" elapsed="0.000125"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:07.986297" elapsed="0.000873"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:07.986160" elapsed="0.001148"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:07.988134" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-25T23:41:07.987830" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:07.987573" elapsed="0.000738"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:07.988394" elapsed="0.000038"/>
</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-25T23:41:07.993489" elapsed="0.000420"/>
</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-25T23:41:07.994133" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:07.994515" elapsed="0.000118"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:07.989873" elapsed="0.004892"/>
</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="PASS" start="2026-04-25T23:41:07.385816" elapsed="0.609191"/>
</kw>
<msg time="2026-04-25T23:41:07.995333" 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="PASS" start="2026-04-25T23:41:07.385100" elapsed="0.610305"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:07.384302" elapsed="0.611184"/>
</kw>
<msg time="2026-04-25T23:41:07.995528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:07.383292" elapsed="0.612283"/>
</kw>
<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-25T23:41:07.998816" elapsed="0.000344"/>
</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-25T23:41:07.999328" elapsed="0.000153"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:07.999633" elapsed="0.000137"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:07.995961" elapsed="0.003871"/>
</kw>
<msg time="2026-04-25T23:41:08.000007" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:07.381225" elapsed="0.618808"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:08.000518" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:08.000252" elapsed="0.000311"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:08.000611" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:41:08.000930" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:07.378862" elapsed="0.622094"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:08.001006" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:41:08.001157" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:07.376549" elapsed="0.624633"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:08.001771" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:08.001344" elapsed="0.000521">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:07.375378" elapsed="0.626608">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.005763" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:10.004982" elapsed="0.000854"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:10.007922" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:10.007258" elapsed="0.000725"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:10.009630" 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-25T23:41:10.009795" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:10.009412" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:10.015499" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:10.014823" elapsed="0.000795"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:10.014409" elapsed="0.001319"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:10.017652" 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-25T23:41:10.017937" 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-25T23:41:10.017195" elapsed="0.000844"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.019598" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:10.019043" elapsed="0.000685"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:10.021472" level="INFO">${conn_id} = 100</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-25T23:41:10.020724" elapsed="0.000852"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.024012" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:10.024093" 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-25T23:41:10.023710" 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-25T23:41:10.024339" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:10.026116" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:10.334724" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:07 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:10.025460" elapsed="0.309504"/>
</kw>
<msg time="2026-04-25T23:41:10.335045" 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="PASS" start="2026-04-25T23:41:10.025041" elapsed="0.310089"/>
</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="PASS" start="2026-04-25T23:41:10.022888" elapsed="0.312518"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:10.336908" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:10.359658" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:10.360217" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:10.360550" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:10.336489" elapsed="0.024316"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:10.363497" elapsed="0.000990"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.366843" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:10.365865" elapsed="0.001215"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:10.367958" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:10.367428" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:10.367307" elapsed="0.000949"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:10.369240" elapsed="0.000118"/>
</return>
<status status="PASS" start="2026-04-25T23:41:10.368598" elapsed="0.000871"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:10.368489" elapsed="0.001111"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:10.370013" elapsed="0.000061"/>
</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-25T23:41:10.376415" elapsed="0.000357"/>
</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-25T23:41:10.377003" elapsed="0.000176"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:10.377374" 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-25T23:41:10.371370" elapsed="0.006214"/>
</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="PASS" start="2026-04-25T23:41:10.012527" elapsed="0.365345"/>
</kw>
<msg time="2026-04-25T23:41:10.378181" 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="PASS" start="2026-04-25T23:41:10.011580" elapsed="0.366659"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:10.010806" elapsed="0.367512"/>
</kw>
<msg time="2026-04-25T23:41:10.378358" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:10.010059" elapsed="0.368343"/>
</kw>
<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-25T23:41:10.381398" elapsed="0.000419"/>
</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-25T23:41:10.381984" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:10.382288" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:10.378711" elapsed="0.003727"/>
</kw>
<msg time="2026-04-25T23:41:10.382529" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:10.008484" elapsed="0.374070"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.382998" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:10.382750" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:10.383085" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:10.383235" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:10.006298" elapsed="0.376961"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:10.383305" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:41:10.383445" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:10.004081" elapsed="0.379388"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:10.384113" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:10.383709" elapsed="0.000478">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:10.002989" elapsed="0.381310">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.387923" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:12.387130" elapsed="0.000862"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:12.390078" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:12.389413" elapsed="0.000726"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:12.391956" 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-25T23:41:12.392184" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:12.391589" elapsed="0.000675"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:12.397816" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:12.397321" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:12.397263" elapsed="0.000695"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:12.399629" 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-25T23:41:12.399898" 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-25T23:41:12.398971" elapsed="0.001026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.401531" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:12.400987" elapsed="0.000653"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:12.403522" level="INFO">${conn_id} = 103</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-25T23:41:12.402658" elapsed="0.000962"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.405915" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:12.406010" 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-25T23:41:12.405608" elapsed="0.000427"/>
</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-25T23:41:12.406252" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:12.407784" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:12.723626" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:10 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:12.407440" elapsed="0.316350"/>
</kw>
<msg time="2026-04-25T23:41:12.723873" 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="PASS" start="2026-04-25T23:41:12.407066" elapsed="0.316891"/>
</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="PASS" start="2026-04-25T23:41:12.404845" elapsed="0.319393"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:12.725738" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:12.748209" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:12.748769" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:12.749113" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:12.725331" elapsed="0.023998"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:12.751746" elapsed="0.000898"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.755260" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:12.754085" elapsed="0.001416"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:12.756454" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:12.755951" elapsed="0.000674"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:12.755824" elapsed="0.000960"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:12.757561" elapsed="0.000172"/>
</return>
<status status="PASS" start="2026-04-25T23:41:12.757110" elapsed="0.000741"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:12.757000" elapsed="0.000983"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:12.758272" elapsed="0.000129"/>
</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-25T23:41:12.763717" 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-25T23:41:12.764267" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:12.764626" elapsed="0.000118"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:12.760240" elapsed="0.004617"/>
</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="PASS" start="2026-04-25T23:41:12.395942" elapsed="0.369140"/>
</kw>
<msg time="2026-04-25T23:41:12.765396" 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="PASS" start="2026-04-25T23:41:12.395216" elapsed="0.370240"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:12.393835" elapsed="0.371704"/>
</kw>
<msg time="2026-04-25T23:41:12.765579" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:12.392624" elapsed="0.373000"/>
</kw>
<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-25T23:41:12.771159" elapsed="0.000808"/>
</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-25T23:41:12.772375" elapsed="0.000426"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:12.773211" elapsed="0.000252"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:12.765945" elapsed="0.007640"/>
</kw>
<msg time="2026-04-25T23:41:12.773902" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:12.390629" elapsed="0.383345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.775201" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:12.774498" elapsed="0.000809"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:12.775516" elapsed="0.000076"/>
</return>
<msg time="2026-04-25T23:41:12.775948" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:12.388456" elapsed="0.387554"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:12.776118" elapsed="0.000060"/>
</return>
<msg time="2026-04-25T23:41:12.776444" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:12.386263" elapsed="0.390235"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:12.777952" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:12.776917" elapsed="0.001222">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:12.385139" elapsed="0.393307">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:14.782058" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:14.781276" elapsed="0.000856"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:14.784385" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:14.783770" elapsed="0.000676"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:14.786267" 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-25T23:41:14.786501" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:14.785938" elapsed="0.000624"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:14.793577" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:14.793070" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:14.793012" elapsed="0.000785"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:14.795454" 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-25T23:41:14.795717" 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-25T23:41:14.794781" elapsed="0.001035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:14.797348" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:14.796798" elapsed="0.000659"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:14.799131" level="INFO">${conn_id} = 106</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-25T23:41:14.798424" elapsed="0.000816"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:14.801566" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:14.801645" 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-25T23:41:14.801280" elapsed="0.000404"/>
</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-25T23:41:14.801901" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:14.803174" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:15.126966" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:12 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:14.802839" elapsed="0.324431"/>
</kw>
<msg time="2026-04-25T23:41:15.127448" 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="PASS" start="2026-04-25T23:41:14.802460" elapsed="0.325172"/>
</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="PASS" start="2026-04-25T23:41:14.800439" elapsed="0.327815"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:15.131752" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:15.154747" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:15.155530" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:15.156041" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:15.130841" elapsed="0.025467"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:15.158823" elapsed="0.001221"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:15.161656" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:15.160994" elapsed="0.000846"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:15.162555" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:15.162079" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:15.161991" elapsed="0.000861"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:15.163347" elapsed="0.000102"/>
</return>
<status status="PASS" start="2026-04-25T23:41:15.163057" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:15.162989" elapsed="0.000614"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:15.163771" elapsed="0.000055"/>
</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-25T23:41:15.170194" elapsed="0.000604"/>
</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-25T23:41:15.171060" elapsed="0.000214"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:15.171541" elapsed="0.000160"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:15.165765" elapsed="0.006075"/>
</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="PASS" start="2026-04-25T23:41:14.790963" elapsed="0.381166"/>
</kw>
<msg time="2026-04-25T23:41:15.172523" 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="PASS" start="2026-04-25T23:41:14.789428" elapsed="0.383181"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:14.788186" elapsed="0.384549"/>
</kw>
<msg time="2026-04-25T23:41:15.172795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:14.786957" elapsed="0.385905"/>
</kw>
<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-25T23:41:15.176578" elapsed="0.000362"/>
</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-25T23:41:15.177111" elapsed="0.000213"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:15.177498" elapsed="0.000105"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:15.173200" elapsed="0.004460"/>
</kw>
<msg time="2026-04-25T23:41:15.177787" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:14.784975" elapsed="0.392839"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:15.178311" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:15.178041" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:15.178416" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:41:15.178585" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:14.782784" elapsed="0.395827"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:15.178661" elapsed="0.000086"/>
</return>
<msg time="2026-04-25T23:41:15.178886" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:14.780424" elapsed="0.398488"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:15.179514" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:15.179079" elapsed="0.000510">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:14.779345" elapsed="0.400377">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.183155" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:17.182398" elapsed="0.000825"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:17.185409" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:17.184876" elapsed="0.000574"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:17.186693" 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-25T23:41:17.186953" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:17.186434" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:17.192746" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:17.192037" elapsed="0.000825"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:17.191956" elapsed="0.000992"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:17.195422" 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-25T23:41:17.195824" 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-25T23:41:17.194385" elapsed="0.001587"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.197934" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:17.197366" elapsed="0.000678"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:17.199841" level="INFO">${conn_id} = 109</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-25T23:41:17.199102" elapsed="0.000837"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.202265" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:17.202343" 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-25T23:41:17.201973" elapsed="0.000394"/>
</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-25T23:41:17.202581" elapsed="0.000508"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:17.204027" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:17.513654" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:15 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:17.203700" elapsed="0.310126"/>
</kw>
<msg time="2026-04-25T23:41:17.513911" 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="PASS" start="2026-04-25T23:41:17.203319" elapsed="0.310683"/>
</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="PASS" start="2026-04-25T23:41:17.201182" elapsed="0.313110"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:17.515819" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:17.529077" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:17.529524" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:17.529939" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:17.515379" elapsed="0.014789"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:17.532626" elapsed="0.000989"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.536194" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:17.535055" elapsed="0.001390"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:17.537408" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:17.536921" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:17.536775" elapsed="0.000772"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:17.537912" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-25T23:41:17.537706" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:17.537642" elapsed="0.000433"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:17.538154" elapsed="0.000038"/>
</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-25T23:41:17.543054" elapsed="0.000352"/>
</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-25T23:41:17.543790" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:17.544168" 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-25T23:41:17.539531" elapsed="0.004852"/>
</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="PASS" start="2026-04-25T23:41:17.189991" elapsed="0.354618"/>
</kw>
<msg time="2026-04-25T23:41:17.544958" 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="PASS" start="2026-04-25T23:41:17.188982" elapsed="0.356040"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:17.188047" elapsed="0.357060"/>
</kw>
<msg time="2026-04-25T23:41:17.545151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:17.187239" elapsed="0.357960"/>
</kw>
<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-25T23:41:17.548334" elapsed="0.000378"/>
</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-25T23:41:17.548887" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:17.549195" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:17.545497" elapsed="0.003848"/>
</kw>
<msg time="2026-04-25T23:41:17.549440" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:17.185801" elapsed="0.363665"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.549937" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:17.549663" elapsed="0.000326"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:17.550043" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:41:17.550204" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:17.183708" elapsed="0.366522"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:17.550277" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:17.550425" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:17.181557" elapsed="0.368893"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:17.551047" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:17.550611" elapsed="0.000510">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:17.180512" elapsed="0.370720">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.555049" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:19.554214" elapsed="0.000906"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:19.557179" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:19.556536" elapsed="0.000703"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:19.559265" 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-25T23:41:19.559525" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:19.558891" elapsed="0.000695"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:19.567643" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:19.566940" elapsed="0.000870"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:19.566882" elapsed="0.001014"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:19.569322" 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-25T23:41:19.569571" 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-25T23:41:19.568884" elapsed="0.000800"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.571219" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:19.570663" elapsed="0.000663"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:19.573102" level="INFO">${conn_id} = 112</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-25T23:41:19.572293" elapsed="0.000911"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.575543" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:19.575620" 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-25T23:41:19.575260" elapsed="0.000384"/>
</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-25T23:41:19.575879" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:19.577153" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:19.878565" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:17 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:19.576828" elapsed="0.301919"/>
</kw>
<msg time="2026-04-25T23:41:19.878850" 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="PASS" start="2026-04-25T23:41:19.576440" elapsed="0.302514"/>
</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="PASS" start="2026-04-25T23:41:19.574478" elapsed="0.304836"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:19.881322" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:19.904130" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:19.904635" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:19.905019" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:19.880817" elapsed="0.024415"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:19.907495" elapsed="0.000887"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.910774" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:19.909655" elapsed="0.001354"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:19.911891" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:19.911356" elapsed="0.000707"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:19.911235" elapsed="0.000959"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:19.913030" elapsed="0.000113"/>
</return>
<status status="PASS" start="2026-04-25T23:41:19.912540" elapsed="0.000714"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:19.912415" elapsed="0.000968"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:19.913561" elapsed="0.000087"/>
</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-25T23:41:19.918952" elapsed="0.000344"/>
</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-25T23:41:19.919514" elapsed="0.000226"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:19.919943" 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-25T23:41:19.915540" elapsed="0.004612"/>
</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="PASS" start="2026-04-25T23:41:19.564202" elapsed="0.356172"/>
</kw>
<msg time="2026-04-25T23:41:19.920755" 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="PASS" start="2026-04-25T23:41:19.562481" elapsed="0.358333"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:19.561170" elapsed="0.359727"/>
</kw>
<msg time="2026-04-25T23:41:19.920938" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:19.559984" elapsed="0.361000"/>
</kw>
<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-25T23:41:19.924075" 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-25T23:41:19.924559" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:19.924875" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:19.921283" elapsed="0.003743"/>
</kw>
<msg time="2026-04-25T23:41:19.925119" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:19.557757" elapsed="0.367388"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.925586" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:19.925329" elapsed="0.000302"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:19.925689" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:41:19.925846" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:19.555580" elapsed="0.370292"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:19.925919" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:19.926096" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:19.553233" elapsed="0.372889"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:19.926705" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:19.926296" elapsed="0.000481">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:19.552052" elapsed="0.374834">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:21.930581" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:21.929818" elapsed="0.000832"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:21.932881" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:21.932234" elapsed="0.000708"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:21.934766" 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-25T23:41:21.934997" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:21.934406" elapsed="0.000698"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:21.941820" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:21.941317" elapsed="0.000583"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:21.941029" elapsed="0.000932"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:21.943429" 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-25T23:41:21.943689" 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-25T23:41:21.942964" elapsed="0.000827"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:21.945337" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:21.944790" elapsed="0.000656"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:21.947282" level="INFO">${conn_id} = 115</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-25T23:41:21.946534" elapsed="0.000846"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:21.949784" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:21.949863" 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-25T23:41:21.949469" elapsed="0.000418"/>
</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-25T23:41:21.950100" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:21.951584" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:22.260787" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:21.951201" elapsed="0.309874"/>
</kw>
<msg time="2026-04-25T23:41:22.261240" 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="PASS" start="2026-04-25T23:41:21.950783" elapsed="0.310616"/>
</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="PASS" start="2026-04-25T23:41:21.948596" elapsed="0.313380"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:22.265433" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:22.288546" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:22.289169" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:22.289510" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:22.264597" elapsed="0.025182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:22.291922" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:22.293999" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:22.293348" elapsed="0.000798"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:22.294720" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:22.294372" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:22.294292" elapsed="0.000616"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:22.295430" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-25T23:41:22.295111" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:22.295044" elapsed="0.000609"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:22.295791" elapsed="0.000053"/>
</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-25T23:41:22.301792" elapsed="0.000341"/>
</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-25T23:41:22.302346" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:22.302720" 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-25T23:41:22.297658" elapsed="0.005270"/>
</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="PASS" start="2026-04-25T23:41:21.939710" elapsed="0.363440"/>
</kw>
<msg time="2026-04-25T23:41:22.303486" 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="PASS" start="2026-04-25T23:41:21.938183" elapsed="0.365362"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:21.936854" elapsed="0.366771"/>
</kw>
<msg time="2026-04-25T23:41:22.303666" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:21.935471" elapsed="0.368258"/>
</kw>
<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-25T23:41:22.306922" elapsed="0.000324"/>
</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-25T23:41:22.307458" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:22.307785" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:22.304093" elapsed="0.003846"/>
</kw>
<msg time="2026-04-25T23:41:22.308033" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:21.933433" elapsed="0.374625"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:22.308496" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:22.308244" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:22.308583" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:22.308769" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:21.931227" elapsed="0.377569"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:22.308846" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:22.308996" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:21.928972" elapsed="0.380050"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:22.309583" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:22.309183" elapsed="0.000475">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:21.927865" elapsed="0.382017">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.313853" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:24.312880" elapsed="0.001065"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:24.316084" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:24.315412" elapsed="0.000731"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:24.318055" 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-25T23:41:24.318322" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:24.317661" elapsed="0.000728"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:24.324074" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:24.323566" elapsed="0.000594"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:24.323279" elapsed="0.000944"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:24.325742" 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-25T23:41:24.325999" 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-25T23:41:24.325252" elapsed="0.000845"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.327659" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:24.327098" elapsed="0.000691"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:24.329511" level="INFO">${conn_id} = 118</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-25T23:41:24.328802" elapsed="0.000809"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.332180" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:24.332258" 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-25T23:41:24.331887" elapsed="0.000394"/>
</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-25T23:41:24.332531" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:24.333915" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:24.639387" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:22 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:24.333548" elapsed="0.305991"/>
</kw>
<msg time="2026-04-25T23:41:24.639627" 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="PASS" start="2026-04-25T23:41:24.333181" elapsed="0.306554"/>
</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="PASS" start="2026-04-25T23:41:24.331096" elapsed="0.308926"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:24.641584" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:24.663702" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:24.664210" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:24.664580" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:24.641178" elapsed="0.023672"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:24.667081" elapsed="0.000912"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.670091" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:24.669314" elapsed="0.000920"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:24.670803" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:24.670459" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:24.670379" elapsed="0.000615"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:24.671472" elapsed="0.000072"/>
</return>
<status status="PASS" start="2026-04-25T23:41:24.671194" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:24.671126" elapsed="0.000588"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:24.671831" elapsed="0.000053"/>
</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-25T23:41:24.679765" elapsed="0.000336"/>
</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-25T23:41:24.680315" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:24.680805" 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-25T23:41:24.673792" elapsed="0.007227"/>
</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="PASS" start="2026-04-25T23:41:24.321884" elapsed="0.359354"/>
</kw>
<msg time="2026-04-25T23:41:24.681546" 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="PASS" start="2026-04-25T23:41:24.321135" elapsed="0.360470"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:24.320235" elapsed="0.361464"/>
</kw>
<msg time="2026-04-25T23:41:24.681741" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:24.318855" elapsed="0.362931"/>
</kw>
<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-25T23:41:24.684841" 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-25T23:41:24.685318" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:24.685612" elapsed="0.000112"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:24.682079" elapsed="0.003697"/>
</kw>
<msg time="2026-04-25T23:41:24.685926" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:24.316701" elapsed="0.369250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.686382" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:24.686136" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:24.686468" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:24.686617" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:24.314421" elapsed="0.372221"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:24.686705" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:24.686848" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:24.311933" elapsed="0.374939"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:24.687415" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:24.687027" elapsed="0.000461">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:24.310776" elapsed="0.376821">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:26.691385" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:26.690507" elapsed="0.000954"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:26.693600" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:26.692989" elapsed="0.000739"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:26.695545" 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-25T23:41:26.695841" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:26.695192" elapsed="0.000716"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:26.701605" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:26.701091" elapsed="0.000636"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:26.701031" elapsed="0.000775"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:26.703893" 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-25T23:41:26.704171" 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-25T23:41:26.703060" elapsed="0.001236"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:26.706123" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:26.705490" elapsed="0.000744"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:26.707995" level="INFO">${conn_id} = 121</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-25T23:41:26.707233" elapsed="0.000864"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:26.710580" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:26.710688" 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-25T23:41:26.710268" elapsed="0.000449"/>
</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-25T23:41:26.710938" elapsed="0.000364"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:26.712315" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:27.017587" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:24 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:26.711969" elapsed="0.305945"/>
</kw>
<msg time="2026-04-25T23:41:27.017998" 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="PASS" start="2026-04-25T23:41:26.711538" elapsed="0.306561"/>
</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="PASS" start="2026-04-25T23:41:26.709415" elapsed="0.308972"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:27.019933" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:27.042568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:27.043468" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:27.043893" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:27.019497" elapsed="0.024639"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:27.046982" elapsed="0.000747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:27.049262" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:27.048540" elapsed="0.000875"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:27.050062" elapsed="0.000050"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:27.049654" elapsed="0.000528"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:27.049568" elapsed="0.000699"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:27.050795" elapsed="0.000086"/>
</return>
<status status="PASS" start="2026-04-25T23:41:27.050477" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:27.050405" elapsed="0.000633"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:27.051154" elapsed="0.000054"/>
</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-25T23:41:27.058284" elapsed="0.000560"/>
</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-25T23:41:27.059089" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:27.059493" 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-25T23:41:27.053114" elapsed="0.006694"/>
</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="PASS" start="2026-04-25T23:41:26.699628" elapsed="0.360412"/>
</kw>
<msg time="2026-04-25T23:41:27.060429" 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="PASS" start="2026-04-25T23:41:26.698924" elapsed="0.361592"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:26.697577" elapsed="0.363051"/>
</kw>
<msg time="2026-04-25T23:41:27.060702" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:26.696283" elapsed="0.364486"/>
</kw>
<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-25T23:41:27.064100" 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-25T23:41:27.064603" elapsed="0.000189"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:27.064950" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:27.061134" elapsed="0.003968"/>
</kw>
<msg time="2026-04-25T23:41:27.065202" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:26.694231" elapsed="0.370997"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:27.065719" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:27.065441" elapsed="0.000332"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:27.065864" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:41:27.066035" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:26.692009" elapsed="0.374052"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:27.066110" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:27.066258" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:26.689531" elapsed="0.376751"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:27.067035" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:27.066580" elapsed="0.000534">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:26.688417" elapsed="0.378812">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.071403" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:29.070401" elapsed="0.001076"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:29.072965" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:29.072550" elapsed="0.000454"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:29.074171" 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-25T23:41:29.074317" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:29.073942" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:29.080060" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:29.079372" elapsed="0.000769"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:29.079290" elapsed="0.000914"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:29.081907" 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-25T23:41:29.082165" 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-25T23:41:29.081204" elapsed="0.001064"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.083865" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:29.083288" elapsed="0.000693"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:29.085767" level="INFO">${conn_id} = 124</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-25T23:41:29.085028" elapsed="0.000846"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.088282" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:29.088363" 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-25T23:41:29.087991" 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-25T23:41:29.088605" elapsed="0.000366"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:29.089932" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:29.385561" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:26 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:29.089580" elapsed="0.296141"/>
</kw>
<msg time="2026-04-25T23:41:29.385801" 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="PASS" start="2026-04-25T23:41:29.089201" elapsed="0.296685"/>
</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="PASS" start="2026-04-25T23:41:29.087194" elapsed="0.298964"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:29.387701" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:29.410383" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:29.410944" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:29.411427" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:29.387276" elapsed="0.024372"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:29.413997" elapsed="0.000965"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.416875" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:29.416226" elapsed="0.000814"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:29.417613" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:29.417277" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:29.417192" elapsed="0.000646"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:29.418357" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-25T23:41:29.418070" elapsed="0.000434"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:29.417999" elapsed="0.000590"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:29.418729" elapsed="0.000058"/>
</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-25T23:41:29.425261" elapsed="0.000351"/>
</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-25T23:41:29.425850" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:29.426251" 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-25T23:41:29.420797" elapsed="0.005672"/>
</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="PASS" start="2026-04-25T23:41:29.077315" elapsed="0.349402"/>
</kw>
<msg time="2026-04-25T23:41:29.427050" 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="PASS" start="2026-04-25T23:41:29.076333" elapsed="0.350795"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:29.075472" elapsed="0.351746"/>
</kw>
<msg time="2026-04-25T23:41:29.427260" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:29.074583" elapsed="0.352725"/>
</kw>
<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-25T23:41:29.430429" 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-25T23:41:29.430943" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:29.431285" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:29.427606" elapsed="0.003832"/>
</kw>
<msg time="2026-04-25T23:41:29.431531" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:29.073320" elapsed="0.358236"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.432081" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:29.431807" elapsed="0.000319"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:29.432171" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:29.432328" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:29.071953" elapsed="0.360400"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:29.432401" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:29.432548" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:29.069390" elapsed="0.363182"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:29.433163" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:29.432749" elapsed="0.000491">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:29.068126" elapsed="0.365256">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.437644" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:31.436134" elapsed="0.001628"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:31.440292" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:31.439536" elapsed="0.000828"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:31.442379" 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-25T23:41:31.442633" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:31.442006" elapsed="0.000725"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:31.448000" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:31.447508" elapsed="0.000576"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:31.447445" elapsed="0.000702"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:31.449884" 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-25T23:41:31.450138" 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-25T23:41:31.449172" elapsed="0.001072"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.451847" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:31.451233" elapsed="0.000728"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:31.453718" level="INFO">${conn_id} = 127</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-25T23:41:31.452997" elapsed="0.000822"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.456188" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:31.456285" 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-25T23:41:31.455897" elapsed="0.000412"/>
</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-25T23:41:31.456525" elapsed="0.000356"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:31.457811" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:31.762426" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:29 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:31.457467" elapsed="0.305087"/>
</kw>
<msg time="2026-04-25T23:41:31.762630" 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="PASS" start="2026-04-25T23:41:31.457104" elapsed="0.305625"/>
</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="PASS" start="2026-04-25T23:41:31.455036" elapsed="0.307959"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:31.764477" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:31.787027" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:31.787533" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:31.787915" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:31.764070" elapsed="0.024061"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:31.790395" elapsed="0.000896"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.793603" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:31.792586" elapsed="0.001290"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:31.795065" elapsed="0.000074"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:31.794237" elapsed="0.001009"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:31.794107" elapsed="0.001267"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:31.796189" elapsed="0.000121"/>
</return>
<status status="PASS" start="2026-04-25T23:41:31.795724" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:31.795588" elapsed="0.001019"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:31.796822" elapsed="0.000086"/>
</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-25T23:41:31.801807" elapsed="0.000352"/>
</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-25T23:41:31.802375" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:31.802775" 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-25T23:41:31.798339" elapsed="0.004652"/>
</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="PASS" start="2026-04-25T23:41:31.446024" elapsed="0.357193"/>
</kw>
<msg time="2026-04-25T23:41:31.803534" 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="PASS" start="2026-04-25T23:41:31.445311" elapsed="0.358287"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:31.444396" elapsed="0.359302"/>
</kw>
<msg time="2026-04-25T23:41:31.803741" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:31.443121" elapsed="0.360667"/>
</kw>
<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-25T23:41:31.806909" elapsed="0.000322"/>
</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-25T23:41:31.807397" elapsed="0.000149"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:31.807712" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:31.804092" elapsed="0.003771"/>
</kw>
<msg time="2026-04-25T23:41:31.807958" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:31.440944" elapsed="0.367040"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.808444" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:31.808175" elapsed="0.000314"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:31.808532" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:31.808702" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:31.438467" elapsed="0.370262"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:31.808778" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:31.808923" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:31.435287" elapsed="0.373661"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:31.809508" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:31.809107" elapsed="0.000473">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:31.434246" elapsed="0.375461">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:33.813589" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:33.812643" elapsed="0.001020"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:33.816233" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:33.815358" elapsed="0.000946"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:33.818353" 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-25T23:41:33.818655" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:33.818009" elapsed="0.000700"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:33.822946" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:33.822203" elapsed="0.000829"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:33.822145" elapsed="0.000948"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:33.824577" 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-25T23:41:33.824848" 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-25T23:41:33.824094" elapsed="0.000855"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:33.826516" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:33.825964" elapsed="0.000661"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:33.828339" level="INFO">${conn_id} = 130</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-25T23:41:33.827621" elapsed="0.000819"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:33.830876" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:33.830956" 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-25T23:41:33.830551" elapsed="0.000429"/>
</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-25T23:41:33.831194" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:33.832502" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:34.139481" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:31 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:33.832158" elapsed="0.307607"/>
</kw>
<msg time="2026-04-25T23:41:34.139925" 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="PASS" start="2026-04-25T23:41:33.831790" elapsed="0.308297"/>
</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="PASS" start="2026-04-25T23:41:33.829788" elapsed="0.310926"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:34.143376" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:34.166493" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:34.167043" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:34.167375" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:34.142802" elapsed="0.024785"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:34.169975" elapsed="0.000904"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:34.173269" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:34.172183" elapsed="0.001325"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:34.174316" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:34.173981" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:34.173849" elapsed="0.000626"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:34.174862" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-04-25T23:41:34.174627" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:34.174576" elapsed="0.000452"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:34.175113" elapsed="0.000038"/>
</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-25T23:41:34.180294" elapsed="0.000360"/>
</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-25T23:41:34.180957" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:34.181329" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:34.176728" elapsed="0.004819"/>
</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="PASS" start="2026-04-25T23:41:33.820756" elapsed="0.361053"/>
</kw>
<msg time="2026-04-25T23:41:34.182127" 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="PASS" start="2026-04-25T23:41:33.820032" elapsed="0.362157"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:33.819455" elapsed="0.362822"/>
</kw>
<msg time="2026-04-25T23:41:34.182320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:33.818885" elapsed="0.363483"/>
</kw>
<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-25T23:41:34.185537" 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-25T23:41:34.186095" elapsed="0.000154"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:34.186402" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:34.182681" elapsed="0.003875"/>
</kw>
<msg time="2026-04-25T23:41:34.186649" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:33.816912" elapsed="0.369778"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:34.187133" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:34.186876" elapsed="0.000313"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:34.187234" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:34.187391" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:33.814254" elapsed="0.373162"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:34.187464" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:34.187609" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:33.811717" elapsed="0.375917"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:34.188251" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:34.187828" elapsed="0.000704">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:33.810525" elapsed="0.378164">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.192303" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:36.191529" elapsed="0.000843"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:36.194434" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:36.193822" elapsed="0.000673"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:36.196301" 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-25T23:41:36.196526" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:36.195981" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:36.202390" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:36.201875" elapsed="0.000660"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:36.201558" elapsed="0.001050"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:36.204176" 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-25T23:41:36.204450" 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-25T23:41:36.203711" elapsed="0.000840"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.206161" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:36.205571" elapsed="0.000705"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:36.208031" level="INFO">${conn_id} = 133</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-25T23:41:36.207305" elapsed="0.000823"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.210650" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:36.210744" 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-25T23:41:36.210364" elapsed="0.000429"/>
</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-25T23:41:36.211006" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:36.212259" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:36.568986" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:34 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:36.211937" elapsed="0.357156"/>
</kw>
<msg time="2026-04-25T23:41:36.569161" 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="PASS" start="2026-04-25T23:41:36.211561" elapsed="0.357681"/>
</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="PASS" start="2026-04-25T23:41:36.209335" elapsed="0.360163"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:36.570966" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:36.593474" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:36.594036" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:36.594422" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:36.570551" elapsed="0.024086"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:36.596939" elapsed="0.000931"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.600124" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:36.599157" elapsed="0.001204"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:36.601239" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:36.600738" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:36.600586" elapsed="0.000955"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:36.602357" elapsed="0.000116"/>
</return>
<status status="PASS" start="2026-04-25T23:41:36.601903" elapsed="0.000679"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:36.601793" elapsed="0.001066"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:36.603128" elapsed="0.000097"/>
</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-25T23:41:36.607989" elapsed="0.000393"/>
</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-25T23:41:36.608596" elapsed="0.000180"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:36.608969" 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-25T23:41:36.604568" elapsed="0.004609"/>
</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="PASS" start="2026-04-25T23:41:36.200197" elapsed="0.409201"/>
</kw>
<msg time="2026-04-25T23:41:36.609780" 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="PASS" start="2026-04-25T23:41:36.199493" elapsed="0.410347"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:36.198289" elapsed="0.411632"/>
</kw>
<msg time="2026-04-25T23:41:36.609962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:36.196973" elapsed="0.413035"/>
</kw>
<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-25T23:41:36.613062" 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-25T23:41:36.613537" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:36.613855" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:36.610301" elapsed="0.003699"/>
</kw>
<msg time="2026-04-25T23:41:36.614092" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:36.195036" elapsed="0.419081"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.614567" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:36.614312" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:36.614653" elapsed="0.000135"/>
</return>
<msg time="2026-04-25T23:41:36.615387" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:36.192863" elapsed="0.422608"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:36.615621" elapsed="0.000135"/>
</return>
<msg time="2026-04-25T23:41:36.616116" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:36.190623" elapsed="0.425564"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:36.617840" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:36.616660" elapsed="0.001379">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:36.189484" elapsed="0.428861">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.622337" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:38.621503" elapsed="0.000908"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:38.624745" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:38.624031" elapsed="0.000782"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:38.626268" 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-25T23:41:38.626419" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:38.626037" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:38.631234" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:38.630744" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:38.630437" elapsed="0.000938"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:38.632866" 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-25T23:41:38.633115" 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-25T23:41:38.632402" elapsed="0.000812"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.634810" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:38.634202" elapsed="0.000718"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:38.636707" level="INFO">${conn_id} = 136</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-25T23:41:38.635964" elapsed="0.000845"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.639177" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:38.639256" 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-25T23:41:38.638883" elapsed="0.000397"/>
</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-25T23:41:38.639494" elapsed="0.000355"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:38.640799" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:38.953290" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:36 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:38.640456" elapsed="0.312980"/>
</kw>
<msg time="2026-04-25T23:41:38.953520" 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="PASS" start="2026-04-25T23:41:38.640086" elapsed="0.313524"/>
</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="PASS" start="2026-04-25T23:41:38.638029" elapsed="0.315883"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:38.955420" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:38.978152" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:38.978392" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:38.978542" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:38.954998" elapsed="0.023640"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:38.979650" elapsed="0.000464"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.981226" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:38.980763" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:38.981797" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:38.981534" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:38.981475" elapsed="0.000462"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:38.982282" elapsed="0.000053"/>
</return>
<status status="PASS" start="2026-04-25T23:41:38.982082" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:38.982033" elapsed="0.000410"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:38.982525" elapsed="0.000037"/>
</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-25T23:41:38.989590" elapsed="0.000359"/>
</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-25T23:41:38.990164" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:38.990595" elapsed="0.000120"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:38.984288" elapsed="0.006538"/>
</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="PASS" start="2026-04-25T23:41:38.629030" elapsed="0.362019"/>
</kw>
<msg time="2026-04-25T23:41:38.991355" 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="PASS" start="2026-04-25T23:41:38.628255" elapsed="0.363161"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:38.627433" elapsed="0.364063"/>
</kw>
<msg time="2026-04-25T23:41:38.991536" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:38.626703" elapsed="0.364878"/>
</kw>
<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-25T23:41:38.994816" 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-25T23:41:38.995297" elapsed="0.000188"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:38.995661" elapsed="0.000174"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:38.992053" elapsed="0.003836"/>
</kw>
<msg time="2026-04-25T23:41:38.995983" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:38.625412" elapsed="0.370595"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.996519" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:38.996232" elapsed="0.000332"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:38.996607" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:41:38.996779" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:38.622943" elapsed="0.373861"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:38.996851" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:38.996994" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:38.620558" elapsed="0.376459"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:38.997615" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:38.997215" elapsed="0.000494">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:38.619321" elapsed="0.378540">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.000296" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:40.999796" elapsed="0.000547"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:41.001661" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:41.001240" elapsed="0.000485"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:41.002878" 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-25T23:41:41.003022" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:41.002618" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:41.008536" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:41.007875" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:41.007795" elapsed="0.000969"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:41.011079" 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-25T23:41:41.011388" 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-25T23:41:41.010106" elapsed="0.001395"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.013715" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:41.012850" elapsed="0.001020"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:41.016093" level="INFO">${conn_id} = 139</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-25T23:41:41.015116" elapsed="0.001093"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.019172" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:41.019267" 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-25T23:41:41.018788" elapsed="0.000510"/>
</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-25T23:41:41.019576" elapsed="0.000733"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:41.021490" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:41.321451" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:38 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:41.021081" elapsed="0.300533"/>
</kw>
<msg time="2026-04-25T23:41:41.321716" 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="PASS" start="2026-04-25T23:41:41.020597" elapsed="0.301211"/>
</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="PASS" start="2026-04-25T23:41:41.017784" elapsed="0.304303"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:41.323590" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:41.346276" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:41.346904" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:41.347287" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:41.323195" elapsed="0.024328"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:41.350177" elapsed="0.001086"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.353700" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:41.352605" elapsed="0.001338"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:41.354714" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:41.354293" elapsed="0.000501"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:41.354171" elapsed="0.000679"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:41.355196" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-25T23:41:41.354994" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:41.354947" elapsed="0.000413"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:41.355443" elapsed="0.000038"/>
</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-25T23:41:41.360345" elapsed="0.000356"/>
</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-25T23:41:41.360912" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:41.361270" 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-25T23:41:41.356888" elapsed="0.004587"/>
</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="PASS" start="2026-04-25T23:41:41.005873" elapsed="0.355857"/>
</kw>
<msg time="2026-04-25T23:41:41.362036" 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="PASS" start="2026-04-25T23:41:41.004842" elapsed="0.357255"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:41.004091" elapsed="0.358087"/>
</kw>
<msg time="2026-04-25T23:41:41.362219" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:41.003294" elapsed="0.358971"/>
</kw>
<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-25T23:41:41.365316" elapsed="0.000344"/>
</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-25T23:41:41.365844" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:41.366139" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:41.362561" elapsed="0.003724"/>
</kw>
<msg time="2026-04-25T23:41:41.366443" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:41.002042" elapsed="0.364430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.366926" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:41.366657" elapsed="0.000313"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:41.367012" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:41.367165" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:41.000644" elapsed="0.366546"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:41.367237" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:41:41.367381" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:40.999261" elapsed="0.368144"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:41.368062" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:41.367563" elapsed="0.000575">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:40.998530" elapsed="0.369721">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.371908" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:43.371125" elapsed="0.000852"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:43.374020" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:43.373381" elapsed="0.000698"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:43.375812" 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-25T23:41:43.375955" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:43.375557" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:43.381281" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:43.380621" elapsed="0.000769"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:43.380542" elapsed="0.000929"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:43.383780" 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-25T23:41:43.384123" 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-25T23:41:43.382853" elapsed="0.001410"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.388144" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:43.386842" elapsed="0.001548"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:43.392187" level="INFO">${conn_id} = 142</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-25T23:41:43.390668" elapsed="0.001664"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.395885" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:43.396000" 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-25T23:41:43.395417" elapsed="0.000618"/>
</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-25T23:41:43.396351" elapsed="0.000512"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:43.398237" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:43.707411" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:41 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:43.397748" elapsed="0.309895"/>
</kw>
<msg time="2026-04-25T23:41:43.707743" 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="PASS" start="2026-04-25T23:41:43.397193" elapsed="0.310632"/>
</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="PASS" start="2026-04-25T23:41:43.394133" elapsed="0.313965"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:43.709562" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:43.732050" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:43.732562" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:43.732979" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:43.709178" elapsed="0.024020"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:43.735534" elapsed="0.000617"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.737763" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:43.737036" elapsed="0.000876"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:43.738486" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:43.738157" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:43.738076" elapsed="0.000621"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:43.739227" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-25T23:41:43.738938" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:43.738860" elapsed="0.000597"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:43.739568" elapsed="0.000052"/>
</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-25T23:41:43.745597" elapsed="0.000480"/>
</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-25T23:41:43.746298" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:43.746684" 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-25T23:41:43.741437" elapsed="0.005480"/>
</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="PASS" start="2026-04-25T23:41:43.378702" elapsed="0.368437"/>
</kw>
<msg time="2026-04-25T23:41:43.747443" 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="PASS" start="2026-04-25T23:41:43.377731" elapsed="0.369770"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:43.376964" elapsed="0.370622"/>
</kw>
<msg time="2026-04-25T23:41:43.747628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:43.376219" elapsed="0.371471"/>
</kw>
<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-25T23:41:43.750824" elapsed="0.000318"/>
</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-25T23:41:43.751310" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:43.751609" elapsed="0.000117"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:43.747989" elapsed="0.003789"/>
</kw>
<msg time="2026-04-25T23:41:43.751883" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:43.374563" elapsed="0.377348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.752344" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:43.752091" elapsed="0.000297"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:43.752431" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:43.752591" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:43.372439" elapsed="0.380178"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:43.752663" elapsed="0.000053"/>
</return>
<msg time="2026-04-25T23:41:43.752844" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:43.370220" elapsed="0.382648"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:43.753545" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:43.753134" elapsed="0.000487">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:43.369116" elapsed="0.384660">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:45.757344" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:45.756572" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:45.759462" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:45.758856" elapsed="0.000666"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:45.761112" 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-25T23:41:45.761253" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:45.760898" elapsed="0.000391"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:45.766737" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:45.766077" elapsed="0.000769"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:45.766000" elapsed="0.000929"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:45.769240" 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-25T23:41:45.769493" 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-25T23:41:45.768402" elapsed="0.001189"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:45.771150" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:45.770582" elapsed="0.000676"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:45.772953" level="INFO">${conn_id} = 145</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-25T23:41:45.772240" elapsed="0.000809"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:45.775340" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:45.775417" 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-25T23:41:45.775053" elapsed="0.000388"/>
</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-25T23:41:45.775651" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:45.776956" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:46.089936" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:43 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:45.776611" elapsed="0.313513"/>
</kw>
<msg time="2026-04-25T23:41:46.090225" 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="PASS" start="2026-04-25T23:41:45.776252" elapsed="0.314072"/>
</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="PASS" start="2026-04-25T23:41:45.774282" elapsed="0.316358"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:46.092338" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:46.115170" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:46.115784" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:46.116280" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:46.091865" elapsed="0.024651"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:46.118762" elapsed="0.000890"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:46.122085" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:46.121006" elapsed="0.001311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:46.123332" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:46.122819" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:46.122546" elapsed="0.001083"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:46.124624" elapsed="0.000184"/>
</return>
<status status="PASS" start="2026-04-25T23:41:46.123986" elapsed="0.000900"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:46.123879" elapsed="0.001066"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:46.125024" elapsed="0.000039"/>
</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-25T23:41:46.129878" 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-25T23:41:46.130434" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:46.130832" 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-25T23:41:46.126352" elapsed="0.004690"/>
</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="PASS" start="2026-04-25T23:41:45.764150" elapsed="0.367117"/>
</kw>
<msg time="2026-04-25T23:41:46.131574" 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="PASS" start="2026-04-25T23:41:45.763153" elapsed="0.368480"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:45.762358" elapsed="0.369373"/>
</kw>
<msg time="2026-04-25T23:41:46.131772" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:45.761513" elapsed="0.370305"/>
</kw>
<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-25T23:41:46.135102" elapsed="0.000314"/>
</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-25T23:41:46.135583" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:46.135903" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:46.132180" elapsed="0.003873"/>
</kw>
<msg time="2026-04-25T23:41:46.136188" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:45.760095" elapsed="0.376120"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:46.136656" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:46.136402" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:46.136760" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:46.136914" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:45.757908" elapsed="0.379031"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:46.136986" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:46.137132" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:45.755706" elapsed="0.381451"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:46.137731" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:46.137317" elapsed="0.000494">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:45.754587" elapsed="0.383339">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.141439" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:48.140604" elapsed="0.000905"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:48.143050" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:48.142643" elapsed="0.000444"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:48.144268" 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-25T23:41:48.144409" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:48.144046" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:48.150041" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:48.149086" elapsed="0.001034"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:48.149005" elapsed="0.001178"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:48.151610" 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-25T23:41:48.151874" 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-25T23:41:48.151168" elapsed="0.000808"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.153529" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:48.152973" elapsed="0.000666"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:48.155347" level="INFO">${conn_id} = 148</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-25T23:41:48.154641" elapsed="0.000804"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.157808" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:48.157886" 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-25T23:41:48.157504" elapsed="0.000405"/>
</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-25T23:41:48.158120" elapsed="0.000330"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:48.159369" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:48.460082" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:46 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:48.159045" elapsed="0.301187"/>
</kw>
<msg time="2026-04-25T23:41:48.460313" 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="PASS" start="2026-04-25T23:41:48.158684" elapsed="0.301718"/>
</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="PASS" start="2026-04-25T23:41:48.156652" elapsed="0.304038"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:48.462257" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:48.484605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:48.485163" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:48.485615" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:48.461844" elapsed="0.024050"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:48.488135" elapsed="0.000930"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.490920" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:48.490265" elapsed="0.000799"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:48.491709" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:48.491288" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:48.491207" elapsed="0.000700"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:48.492385" elapsed="0.000073"/>
</return>
<status status="PASS" start="2026-04-25T23:41:48.492104" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:48.492038" elapsed="0.000567"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:48.492738" elapsed="0.000053"/>
</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-25T23:41:48.499378" elapsed="0.000490"/>
</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-25T23:41:48.500166" elapsed="0.000228"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:48.500662" elapsed="0.000167"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:48.494600" elapsed="0.006378"/>
</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="PASS" start="2026-04-25T23:41:48.147140" elapsed="0.354144"/>
</kw>
<msg time="2026-04-25T23:41:48.501776" 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="PASS" start="2026-04-25T23:41:48.146205" elapsed="0.355672"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:48.145427" elapsed="0.356553"/>
</kw>
<msg time="2026-04-25T23:41:48.502023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:48.144692" elapsed="0.357377"/>
</kw>
<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-25T23:41:48.505142" 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-25T23:41:48.505646" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:48.505997" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:48.502363" elapsed="0.003785"/>
</kw>
<msg time="2026-04-25T23:41:48.506242" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:48.143429" elapsed="0.362838"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.506735" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:48.506451" elapsed="0.000329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:48.506822" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:48.506980" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:48.142064" elapsed="0.364940"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:48.507053" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:48.507200" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:48.139792" elapsed="0.367432"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:48.507834" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:48.507384" elapsed="0.000528">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:48.138728" elapsed="0.369300">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.511560" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:50.510788" elapsed="0.000841"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:50.513727" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:50.513094" elapsed="0.000696"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:50.515382" 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-25T23:41:50.515631" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:50.515154" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:50.521273" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:50.520598" elapsed="0.000785"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:50.520247" elapsed="0.001217"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:50.523577" 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-25T23:41:50.523854" 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-25T23:41:50.522936" elapsed="0.001017"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.525460" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:50.524922" elapsed="0.000646"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:50.527308" level="INFO">${conn_id} = 151</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-25T23:41:50.526564" elapsed="0.000845"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.529730" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:50.529811" 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-25T23:41:50.529422" elapsed="0.000414"/>
</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-25T23:41:50.530052" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:50.531341" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:50.852591" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:48 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:50.531014" elapsed="0.321734"/>
</kw>
<msg time="2026-04-25T23:41:50.852829" 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="PASS" start="2026-04-25T23:41:50.530636" elapsed="0.322282"/>
</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="PASS" start="2026-04-25T23:41:50.528647" elapsed="0.324544"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:50.854738" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:50.877603" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:50.878152" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:50.878484" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:50.854292" elapsed="0.024497"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:50.880980" elapsed="0.000897"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.884150" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:50.883164" elapsed="0.001213"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:50.885266" elapsed="0.000071"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:50.884764" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:50.884603" elapsed="0.000961"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:50.886368" elapsed="0.000112"/>
</return>
<status status="PASS" start="2026-04-25T23:41:50.885926" elapsed="0.000659"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:50.885816" elapsed="0.001103"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:50.887106" elapsed="0.000044"/>
</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-25T23:41:50.891891" 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-25T23:41:50.892502" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:50.892896" 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-25T23:41:50.888422" elapsed="0.004690"/>
</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="PASS" start="2026-04-25T23:41:50.518382" elapsed="0.374952"/>
</kw>
<msg time="2026-04-25T23:41:50.893642" 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="PASS" start="2026-04-25T23:41:50.517434" elapsed="0.376280"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:50.516651" elapsed="0.377147"/>
</kw>
<msg time="2026-04-25T23:41:50.893841" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:50.515921" elapsed="0.377967"/>
</kw>
<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-25T23:41:50.896929" 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-25T23:41:50.897409" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:50.897731" elapsed="0.000144"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:50.894182" elapsed="0.003745"/>
</kw>
<msg time="2026-04-25T23:41:50.898017" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:50.514279" elapsed="0.383763"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.898470" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:50.898224" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:50.898554" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:50.898835" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:50.512116" elapsed="0.386745"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:50.898909" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:50.899064" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:50.509905" elapsed="0.389184"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:50.899643" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:50.899246" elapsed="0.000486">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:50.508864" elapsed="0.390979">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:52.903442" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:52.902662" elapsed="0.000850"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:52.905045" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:52.904635" elapsed="0.000449"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:52.906231" 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-25T23:41:52.906372" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:52.906004" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:52.912292" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:52.911626" elapsed="0.000809"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:52.911245" elapsed="0.001252"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:52.913965" 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-25T23:41:52.914213" 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-25T23:41:52.913502" elapsed="0.000810"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:52.915904" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:52.915289" elapsed="0.000728"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:52.917773" level="INFO">${conn_id} = 154</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-25T23:41:52.917027" elapsed="0.000844"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:52.920416" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:52.920495" 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-25T23:41:52.920126" 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-25T23:41:52.920747" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:52.922009" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:53.243703" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:50 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:52.921681" elapsed="0.322269"/>
</kw>
<msg time="2026-04-25T23:41:53.244049" 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="PASS" start="2026-04-25T23:41:52.921304" elapsed="0.322860"/>
</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="PASS" start="2026-04-25T23:41:52.919225" elapsed="0.325242"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:53.246035" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:53.268461" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:53.269022" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:53.269357" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:53.245598" elapsed="0.023971"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:53.271815" elapsed="0.000930"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:53.275021" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:53.274024" elapsed="0.001246"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:53.276211" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:53.275636" elapsed="0.000744"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:53.275504" elapsed="0.001003"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:53.277328" elapsed="0.000114"/>
</return>
<status status="PASS" start="2026-04-25T23:41:53.276868" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:53.276759" elapsed="0.001129"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:53.278075" elapsed="0.000084"/>
</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-25T23:41:53.290186" elapsed="0.000523"/>
</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-25T23:41:53.291017" elapsed="0.000239"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:53.291538" elapsed="0.000168"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:53.281437" elapsed="0.010424"/>
</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="PASS" start="2026-04-25T23:41:52.909298" elapsed="0.382921"/>
</kw>
<msg time="2026-04-25T23:41:53.292773" 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="PASS" start="2026-04-25T23:41:52.908343" elapsed="0.384515"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:52.907373" elapsed="0.385600"/>
</kw>
<msg time="2026-04-25T23:41:53.293030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:52.906633" elapsed="0.386462"/>
</kw>
<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-25T23:41:53.297429" elapsed="0.000360"/>
</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-25T23:41:53.297957" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:53.298268" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:53.293530" elapsed="0.004891"/>
</kw>
<msg time="2026-04-25T23:41:53.298522" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:52.905392" elapsed="0.393155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:53.299002" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:53.298748" elapsed="0.000299"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:53.299090" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:41:53.299251" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:52.904040" elapsed="0.395237"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:53.299325" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:53.299470" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:52.901820" elapsed="0.397675"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:53.300120" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:53.299651" elapsed="0.000543">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:52.900714" elapsed="0.399614">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.303985" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:55.303196" elapsed="0.000860"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:55.306253" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:55.305550" elapsed="0.000765"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:55.308160" 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-25T23:41:55.308385" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:55.307829" elapsed="0.000615"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:55.313377" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:55.312878" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:55.312820" elapsed="0.000695"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:55.315252" 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-25T23:41:55.315508" 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-25T23:41:55.314504" elapsed="0.001103"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.317332" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:55.316755" elapsed="0.000685"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:55.319222" level="INFO">${conn_id} = 157</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-25T23:41:55.318513" elapsed="0.000808"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.321790" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:55.321869" 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-25T23:41:55.321483" elapsed="0.000410"/>
</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-25T23:41:55.322114" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:55.323392" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:55.646118" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:53 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:55.323063" elapsed="0.323217"/>
</kw>
<msg time="2026-04-25T23:41:55.646369" 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="PASS" start="2026-04-25T23:41:55.322698" elapsed="0.323772"/>
</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="PASS" start="2026-04-25T23:41:55.320687" elapsed="0.326122"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:55.648358" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:55.671453" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:55.672037" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:55.672391" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:55.647946" elapsed="0.024699"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:55.675246" elapsed="0.001074"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.678550" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:55.677753" elapsed="0.000987"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:55.679382" elapsed="0.000048"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:55.678995" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:55.678910" elapsed="0.000672"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:55.680142" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-25T23:41:55.679822" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:55.679747" elapsed="0.000652"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:55.680512" elapsed="0.000057"/>
</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-25T23:41:55.687644" 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-25T23:41:55.688283" elapsed="0.000183"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:55.688745" elapsed="0.000111"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:55.682881" elapsed="0.006090"/>
</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="PASS" start="2026-04-25T23:41:55.311486" elapsed="0.377752"/>
</kw>
<msg time="2026-04-25T23:41:55.689573" 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="PASS" start="2026-04-25T23:41:55.310793" elapsed="0.378843"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:55.310217" elapsed="0.379525"/>
</kw>
<msg time="2026-04-25T23:41:55.689786" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:55.308832" elapsed="0.381003"/>
</kw>
<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-25T23:41:55.693086" elapsed="0.000370"/>
</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-25T23:41:55.693652" elapsed="0.000181"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:55.693989" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:55.690209" elapsed="0.003934"/>
</kw>
<msg time="2026-04-25T23:41:55.694240" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:55.306841" elapsed="0.387424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.694758" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:55.694453" elapsed="0.000358"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:55.694855" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:41:55.695016" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:55.304518" elapsed="0.390524"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:55.695092" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:41:55.695243" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:55.302344" elapsed="0.392925"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:55.695906" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:55.695442" elapsed="0.000540">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:55.301244" elapsed="0.394856">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:41:57.699613" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:41:57.698857" elapsed="0.000858"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:41:57.701814" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:41:57.701161" elapsed="0.000716"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:57.703738" 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-25T23:41:57.703975" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:41:57.703375" elapsed="0.000661"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:41:57.710617" elapsed="0.000071"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:41:57.709946" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:57.709867" elapsed="0.000968"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:57.712699" 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-25T23:41:57.712950" 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-25T23:41:57.711996" elapsed="0.001054"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:57.714595" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:41:57.714025" elapsed="0.000697"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:41:57.716398" level="INFO">${conn_id} = 160</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-25T23:41:57.715691" elapsed="0.000806"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:41:57.718900" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:41:57.719005" 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-25T23:41:57.718589" elapsed="0.000443"/>
</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-25T23:41:57.719268" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:41:57.720782" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:41:58.036594" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:55 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:41:57.720431" elapsed="0.316356"/>
</kw>
<msg time="2026-04-25T23:41:58.036874" 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="PASS" start="2026-04-25T23:41:57.720061" elapsed="0.316916"/>
</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="PASS" start="2026-04-25T23:41:57.717811" elapsed="0.319463"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:41:58.038838" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:41:58.062186" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:41:58.062853" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:41:58.063193" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:41:58.038393" elapsed="0.025016"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:58.065653" elapsed="0.000939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:58.068915" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:58.067917" elapsed="0.001232"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:58.070057" elapsed="0.000068"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:41:58.069514" elapsed="0.000713"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:58.069388" elapsed="0.000965"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:41:58.071227" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-25T23:41:58.070764" elapsed="0.000575"/>
</branch>
<status status="PASS" start="2026-04-25T23:41:58.070624" elapsed="0.000781"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:41:58.071488" elapsed="0.000040"/>
</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-25T23:41:58.076396" elapsed="0.000368"/>
</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-25T23:41:58.076979" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:58.077337" 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-25T23:41:58.072910" elapsed="0.004634"/>
</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="PASS" start="2026-04-25T23:41:57.708032" elapsed="0.369753"/>
</kw>
<msg time="2026-04-25T23:41:58.078150" 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="PASS" start="2026-04-25T23:41:57.706958" elapsed="0.371255"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:41:57.705602" elapsed="0.372699"/>
</kw>
<msg time="2026-04-25T23:41:58.078342" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:41:57.704398" elapsed="0.373990"/>
</kw>
<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-25T23:41:58.081573" elapsed="0.000335"/>
</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-25T23:41:58.082074" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:41:58.082374" elapsed="0.000114"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:41:58.078734" elapsed="0.003808"/>
</kw>
<msg time="2026-04-25T23:41:58.082799" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:41:57.702401" elapsed="0.380427"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:41:58.083304" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:41:58.083043" elapsed="0.000306"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:41:58.083392" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:41:58.083549" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:41:57.700193" elapsed="0.383381"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:41:58.083623" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:41:58.083799" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:41:57.697961" elapsed="0.385863"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:41:58.084395" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:41:58.083985" elapsed="0.000487">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:41:57.696906" elapsed="0.387686">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.088231" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:00.087422" elapsed="0.000878"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:00.090367" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:00.089757" elapsed="0.000670"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:00.092333" 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-25T23:42:00.092481" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:00.092008" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:00.098041" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:00.097376" elapsed="0.000776"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:00.097298" elapsed="0.000937"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:00.100640" 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-25T23:42:00.101090" 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-25T23:42:00.099716" elapsed="0.001512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.103528" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:00.102616" elapsed="0.001179"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:00.105714" level="INFO">${conn_id} = 163</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-25T23:42:00.105007" elapsed="0.000817"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.108353" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:00.108433" 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-25T23:42:00.108050" 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-25T23:42:00.108709" elapsed="0.000346"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:00.110015" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:00.422378" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:41:57 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:00.109665" elapsed="0.312961"/>
</kw>
<msg time="2026-04-25T23:42:00.422728" 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="PASS" start="2026-04-25T23:42:00.109279" elapsed="0.313550"/>
</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="PASS" start="2026-04-25T23:42:00.107212" elapsed="0.315999"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:00.424853" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:00.447398" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:00.448027" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:00.448367" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:00.424418" elapsed="0.024162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:00.450918" elapsed="0.001191"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.454471" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:00.453423" elapsed="0.001371"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:00.455954" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:00.455283" elapsed="0.000852"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:00.455034" elapsed="0.001230"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:00.456861" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-25T23:42:00.456544" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:00.456479" elapsed="0.000554"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:00.457113" elapsed="0.000039"/>
</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-25T23:42:00.462048" elapsed="0.000353"/>
</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-25T23:42:00.462617" elapsed="0.000190"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:00.463006" 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-25T23:42:00.458462" elapsed="0.004758"/>
</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="PASS" start="2026-04-25T23:42:00.095398" elapsed="0.368046"/>
</kw>
<msg time="2026-04-25T23:42:00.463800" 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="PASS" start="2026-04-25T23:42:00.094429" elapsed="0.369437"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:00.093632" elapsed="0.370320"/>
</kw>
<msg time="2026-04-25T23:42:00.463995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:00.092901" elapsed="0.371141"/>
</kw>
<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-25T23:42:00.467187" elapsed="0.000347"/>
</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-25T23:42:00.467716" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:00.468046" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:00.464342" elapsed="0.003854"/>
</kw>
<msg time="2026-04-25T23:42:00.468289" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:00.090949" elapsed="0.377366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.468873" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:00.468508" elapsed="0.000410"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:00.468961" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:00.469116" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:00.088797" elapsed="0.380344"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:00.469189" elapsed="0.000094"/>
</return>
<msg time="2026-04-25T23:42:00.469411" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:00.086526" elapsed="0.382910"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:00.470088" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:00.469684" elapsed="0.000477">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:00.085412" elapsed="0.384862">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.474196" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:02.473371" elapsed="0.000899"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:02.476355" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:02.475737" elapsed="0.000679"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:02.478362" 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-25T23:42:02.478597" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:02.478009" elapsed="0.000648"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:02.483441" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:02.482727" elapsed="0.000796"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:02.482651" elapsed="0.000935"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:02.485109" 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-25T23:42:02.485378" 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-25T23:42:02.484598" elapsed="0.000885"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.487070" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:02.486483" elapsed="0.000695"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:02.488913" level="INFO">${conn_id} = 166</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-25T23:42:02.488164" elapsed="0.000848"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.491367" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:02.491445" 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-25T23:42:02.491077" elapsed="0.000392"/>
</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-25T23:42:02.491710" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:02.493071" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:02.811688" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:00 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:02.492639" elapsed="0.319199"/>
</kw>
<msg time="2026-04-25T23:42:02.811921" 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="PASS" start="2026-04-25T23:42:02.492276" elapsed="0.319733"/>
</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="PASS" start="2026-04-25T23:42:02.490228" elapsed="0.322069"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:02.813907" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:02.836808" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:02.837379" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:02.837778" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:02.813475" elapsed="0.024526"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:02.840324" elapsed="0.000997"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.842946" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:02.842242" elapsed="0.000857"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:02.843698" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:02.843334" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:02.843251" elapsed="0.000651"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:02.844397" elapsed="0.000089"/>
</return>
<status status="PASS" start="2026-04-25T23:42:02.844106" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:02.844037" elapsed="0.000676"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:02.844833" elapsed="0.000055"/>
</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-25T23:42:02.851152" elapsed="0.000356"/>
</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-25T23:42:02.851746" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:02.852118" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:02.846896" elapsed="0.005435"/>
</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="PASS" start="2026-04-25T23:42:02.481312" elapsed="0.371252"/>
</kw>
<msg time="2026-04-25T23:42:02.852893" 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="PASS" start="2026-04-25T23:42:02.480582" elapsed="0.372372"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:02.480026" elapsed="0.373033"/>
</kw>
<msg time="2026-04-25T23:42:02.853104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:02.479353" elapsed="0.373797"/>
</kw>
<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-25T23:42:02.856410" 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-25T23:42:02.856917" elapsed="0.000190"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:02.857262" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:02.853451" elapsed="0.003966"/>
</kw>
<msg time="2026-04-25T23:42:02.857511" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:02.477001" elapsed="0.380537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.858005" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:02.857744" elapsed="0.000308"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:02.858096" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:02.858257" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:02.474772" elapsed="0.383511"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:02.858336" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:02.858490" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:02.472448" elapsed="0.386067"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:02.859136" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:02.858716" elapsed="0.000501">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:02.471215" elapsed="0.388138">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:04.863470" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:04.862535" elapsed="0.001010"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:04.866224" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:04.865412" elapsed="0.000894"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:04.867545" 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-25T23:42:04.867710" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:04.867322" elapsed="0.000427"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:04.873262" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:04.872595" elapsed="0.000779"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:04.872243" elapsed="0.001213"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:04.875433" 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-25T23:42:04.875809" 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-25T23:42:04.874832" elapsed="0.001114"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:04.878062" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:04.877284" elapsed="0.000971"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:04.880228" level="INFO">${conn_id} = 169</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-25T23:42:04.879374" elapsed="0.000954"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:04.882664" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:04.882941" 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-25T23:42:04.882365" elapsed="0.000600"/>
</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-25T23:42:04.883194" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:04.884471" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:05.209940" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:02 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:04.884141" elapsed="0.325962"/>
</kw>
<msg time="2026-04-25T23:42:05.210195" 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="PASS" start="2026-04-25T23:42:04.883780" elapsed="0.326525"/>
</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="PASS" start="2026-04-25T23:42:04.881559" elapsed="0.329047"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:05.212177" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:05.234630" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:05.235252" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:05.235614" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:05.211760" elapsed="0.024127"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:05.238400" elapsed="0.000715"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:05.240569" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:05.239938" elapsed="0.000799"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:05.241432" elapsed="0.000047"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:05.240971" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:05.240889" elapsed="0.000742"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:05.242173" elapsed="0.000094"/>
</return>
<status status="PASS" start="2026-04-25T23:42:05.241874" elapsed="0.000489"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:05.241801" elapsed="0.000647"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:05.242567" elapsed="0.000055"/>
</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-25T23:42:05.248682" elapsed="0.000343"/>
</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-25T23:42:05.249238" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:05.249598" elapsed="0.000159"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:05.244544" elapsed="0.005356"/>
</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="PASS" start="2026-04-25T23:42:04.870418" elapsed="0.379705"/>
</kw>
<msg time="2026-04-25T23:42:05.250449" 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="PASS" start="2026-04-25T23:42:04.869463" elapsed="0.381048"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:04.868710" elapsed="0.381887"/>
</kw>
<msg time="2026-04-25T23:42:05.250638" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:04.867976" elapsed="0.382723"/>
</kw>
<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-25T23:42:05.253775" 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-25T23:42:05.254256" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:05.254579" elapsed="0.000113"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:05.250993" elapsed="0.003752"/>
</kw>
<msg time="2026-04-25T23:42:05.254837" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:04.866744" elapsed="0.388117"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:05.255291" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:05.255043" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:05.255376" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:05.255527" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:04.864314" elapsed="0.391238"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:05.255599" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:42:05.255808" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:04.861554" elapsed="0.394280"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:05.256389" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:05.255991" elapsed="0.000474">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:04.860316" elapsed="0.396262">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.260463" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:07.259620" elapsed="0.000916"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:07.262779" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:07.262086" elapsed="0.000758"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:07.264780" 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-25T23:42:07.265152" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:07.264413" elapsed="0.000801"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:07.270690" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:07.270197" elapsed="0.000575"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:07.269922" elapsed="0.000912"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:07.272319" 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-25T23:42:07.272572" 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-25T23:42:07.271840" elapsed="0.000846"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.274213" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:07.273655" elapsed="0.000668"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:07.276047" level="INFO">${conn_id} = 172</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-25T23:42:07.275310" elapsed="0.000836"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.278533" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:07.278611" 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-25T23:42:07.278249" elapsed="0.000386"/>
</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-25T23:42:07.278867" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:07.280159" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:07.575984" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:41:07 UTC 2026

  System load:  0.28               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:05 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:07.279836" elapsed="0.296333"/>
</kw>
<msg time="2026-04-25T23:42:07.576264" 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="PASS" start="2026-04-25T23:42:07.279451" elapsed="0.296913"/>
</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="PASS" start="2026-04-25T23:42:07.277354" elapsed="0.299376"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:07.578295" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:07.601010" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:07.601576" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:07.602016" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:07.577880" elapsed="0.024369"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:07.604831" elapsed="0.000633"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.606944" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:07.606287" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:07.607704" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:07.607313" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:07.607232" elapsed="0.000665"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:07.608381" elapsed="0.000076"/>
</return>
<status status="PASS" start="2026-04-25T23:42:07.608099" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:07.608033" elapsed="0.000574"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:07.608741" elapsed="0.000054"/>
</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-25T23:42:07.617622" elapsed="0.000378"/>
</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-25T23:42:07.618273" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:07.618638" elapsed="0.000120"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:07.610663" elapsed="0.008205"/>
</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="PASS" start="2026-04-25T23:42:07.268571" elapsed="0.350518"/>
</kw>
<msg time="2026-04-25T23:42:07.619396" 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="PASS" start="2026-04-25T23:42:07.267905" elapsed="0.351554"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:07.266788" elapsed="0.352751"/>
</kw>
<msg time="2026-04-25T23:42:07.619593" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:07.265574" elapsed="0.354065"/>
</kw>
<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-25T23:42:07.622754" 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-25T23:42:07.623300" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:07.623642" elapsed="0.000135"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:07.619954" elapsed="0.003876"/>
</kw>
<msg time="2026-04-25T23:42:07.623922" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:07.263391" elapsed="0.360556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.624397" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:07.624147" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:07.624484" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:07.624642" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:07.261054" elapsed="0.363636"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:07.624750" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:42:07.624902" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:07.258596" elapsed="0.366330"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:07.625501" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:07.625081" elapsed="0.000496">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:07.257415" elapsed="0.368360">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:09.629569" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:09.628799" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:09.631732" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:09.631076" elapsed="0.000720"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:09.633712" 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-25T23:42:09.633916" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:09.633324" elapsed="0.000629"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:09.639500" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:09.638745" elapsed="0.001006"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:09.638643" elapsed="0.001202"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:09.642359" 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-25T23:42:09.642800" 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-25T23:42:09.641261" elapsed="0.001680"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:09.645230" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:09.644312" elapsed="0.001072"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:09.647448" level="INFO">${conn_id} = 175</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-25T23:42:09.646563" elapsed="0.001005"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:09.650002" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:09.650080" 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-25T23:42:09.649705" elapsed="0.000400"/>
</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-25T23:42:09.650321" elapsed="0.000517"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:09.651779" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:10.241527" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:07 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:09.651429" elapsed="0.590280"/>
</kw>
<msg time="2026-04-25T23:42:10.241804" 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="PASS" start="2026-04-25T23:42:09.651064" elapsed="0.590836"/>
</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="PASS" start="2026-04-25T23:42:09.648873" elapsed="0.593324"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:10.243771" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:10.266993" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:10.267559" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:10.267984" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:10.243321" elapsed="0.024897"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:10.270635" elapsed="0.000973"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:10.273985" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:10.272936" elapsed="0.001198"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:10.274724" elapsed="0.000046"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:10.274367" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:10.274285" elapsed="0.000634"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:10.275412" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-25T23:42:10.275126" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:10.275057" elapsed="0.000581"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:10.275774" elapsed="0.000055"/>
</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-25T23:42:10.282439" elapsed="0.000361"/>
</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-25T23:42:10.283017" elapsed="0.000172"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:10.283386" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:10.277850" elapsed="0.005749"/>
</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="PASS" start="2026-04-25T23:42:09.636762" elapsed="0.647079"/>
</kw>
<msg time="2026-04-25T23:42:10.284209" 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="PASS" start="2026-04-25T23:42:09.635764" elapsed="0.648509"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:09.634941" elapsed="0.649417"/>
</kw>
<msg time="2026-04-25T23:42:10.284400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:09.634179" elapsed="0.650268"/>
</kw>
<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-25T23:42:10.287566" 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-25T23:42:10.288072" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:10.288372" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:10.284763" elapsed="0.003759"/>
</kw>
<msg time="2026-04-25T23:42:10.288615" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:09.632289" elapsed="0.656352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:10.289135" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:10.288843" elapsed="0.000338"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:10.289224" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:10.289382" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:09.630135" elapsed="0.659272"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:10.289453" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:42:10.289598" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:09.627915" elapsed="0.661708"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:10.290217" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:10.289814" elapsed="0.000479">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:09.626611" elapsed="0.663798">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.293996" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:12.293211" elapsed="0.000884"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:12.296188" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:12.295518" elapsed="0.000730"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:12.298040" 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-25T23:42:12.298325" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:12.297715" elapsed="0.000670"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:12.303887" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:12.303237" elapsed="0.000758"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:12.303160" elapsed="0.000920"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:12.306474" 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-25T23:42:12.306918" 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-25T23:42:12.305427" elapsed="0.001643"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.308579" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:12.308044" elapsed="0.000660"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:12.310452" level="INFO">${conn_id} = 178</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-25T23:42:12.309739" elapsed="0.000818"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.312898" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:12.312975" 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-25T23:42:12.312585" elapsed="0.000414"/>
</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-25T23:42:12.313209" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:12.314504" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:12.650656" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:10 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:12.314179" elapsed="0.336649"/>
</kw>
<msg time="2026-04-25T23:42:12.650914" 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="PASS" start="2026-04-25T23:42:12.313777" elapsed="0.337236"/>
</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="PASS" start="2026-04-25T23:42:12.311821" elapsed="0.339481"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:12.652825" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:12.675553" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:12.676104" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:12.676441" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:12.652412" elapsed="0.024241"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:12.678977" elapsed="0.000906"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.682178" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:12.681153" elapsed="0.001283"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:12.683328" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:12.682827" elapsed="0.000676"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:12.682661" elapsed="0.000968"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:12.684447" elapsed="0.000120"/>
</return>
<status status="PASS" start="2026-04-25T23:42:12.683992" elapsed="0.000723"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:12.683879" elapsed="0.000973"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:12.685031" elapsed="0.000084"/>
</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-25T23:42:12.690887" 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-25T23:42:12.691441" elapsed="0.000162"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:12.691814" 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-25T23:42:12.687468" elapsed="0.004558"/>
</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="PASS" start="2026-04-25T23:42:12.301302" elapsed="0.390944"/>
</kw>
<msg time="2026-04-25T23:42:12.692555" 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="PASS" start="2026-04-25T23:42:12.300360" elapsed="0.392251"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:12.299585" elapsed="0.393124"/>
</kw>
<msg time="2026-04-25T23:42:12.692751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:12.298771" elapsed="0.394028"/>
</kw>
<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-25T23:42:12.695945" 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-25T23:42:12.696422" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:12.696733" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:12.693190" elapsed="0.003692"/>
</kw>
<msg time="2026-04-25T23:42:12.696974" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:12.296765" elapsed="0.400234"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.697432" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:12.697183" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:12.697518" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:12.697754" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:12.294559" elapsed="0.403223"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:12.697831" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:42:12.697977" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:12.292376" elapsed="0.405625"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:12.698586" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:12.698159" elapsed="0.000502">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:12.291267" elapsed="0.407524">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:14.702377" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:14.701606" elapsed="0.000840"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:14.704417" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:14.704004" elapsed="0.000453"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:14.705608" 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-25T23:42:14.705774" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:14.705385" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:14.711233" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:14.710576" elapsed="0.000854"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:14.710496" elapsed="0.001044"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:14.713478" 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-25T23:42:14.713751" 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-25T23:42:14.712776" elapsed="0.001074"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:14.715434" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:14.714848" elapsed="0.000697"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:14.717246" level="INFO">${conn_id} = 181</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-25T23:42:14.716531" elapsed="0.000812"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:14.719840" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:14.719923" 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-25T23:42:14.719382" elapsed="0.000564"/>
</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-25T23:42:14.720157" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:14.721508" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:15.034018" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:12 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:14.721181" elapsed="0.313003"/>
</kw>
<msg time="2026-04-25T23:42:15.034270" 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="PASS" start="2026-04-25T23:42:14.720809" elapsed="0.313553"/>
</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="PASS" start="2026-04-25T23:42:14.718600" elapsed="0.316049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:15.036194" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:15.058947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:15.059461" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:15.059926" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:15.035792" elapsed="0.024358"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:15.062426" elapsed="0.000943"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:15.065108" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:15.064453" elapsed="0.000801"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:15.065836" elapsed="0.000044"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:15.065481" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:15.065401" elapsed="0.000625"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:15.066511" elapsed="0.000073"/>
</return>
<status status="PASS" start="2026-04-25T23:42:15.066228" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:15.066160" elapsed="0.000595"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:15.066870" elapsed="0.000053"/>
</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-25T23:42:15.073171" elapsed="0.000365"/>
</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-25T23:42:15.073778" elapsed="0.000168"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:15.074141" 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-25T23:42:15.068857" elapsed="0.005506"/>
</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="PASS" start="2026-04-25T23:42:14.708528" elapsed="0.366083"/>
</kw>
<msg time="2026-04-25T23:42:15.075047" 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="PASS" start="2026-04-25T23:42:14.707579" elapsed="0.367531"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:14.706779" elapsed="0.368416"/>
</kw>
<msg time="2026-04-25T23:42:15.075238" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:14.706040" elapsed="0.369245"/>
</kw>
<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-25T23:42:15.078310" 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-25T23:42:15.078841" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:15.079154" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:15.075607" elapsed="0.003697"/>
</kw>
<msg time="2026-04-25T23:42:15.079508" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:14.704788" elapsed="0.374787"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:15.080108" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:15.079812" elapsed="0.000348"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:15.080203" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:42:15.080366" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:14.702944" elapsed="0.377448"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:15.080443" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:42:15.080594" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:14.700794" elapsed="0.379826"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:15.081207" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:15.080799" elapsed="0.000483">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:14.699634" elapsed="0.381763">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.085213" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:17.084343" elapsed="0.000941"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:17.087348" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:17.086729" elapsed="0.000696"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:17.089345" 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-25T23:42:17.089760" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:17.088972" elapsed="0.000852"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:17.095783" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:17.095053" elapsed="0.000810"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:17.094995" elapsed="0.000929"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:17.097421" 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-25T23:42:17.097665" 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-25T23:42:17.096969" elapsed="0.000815"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.099314" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:17.098773" elapsed="0.000650"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:17.101138" level="INFO">${conn_id} = 184</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-25T23:42:17.100391" elapsed="0.000844"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.103564" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:17.103642" 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-25T23:42:17.103277" elapsed="0.000388"/>
</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-25T23:42:17.103892" elapsed="0.000330"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:17.105196" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:17.409553" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:14 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:17.104867" elapsed="0.304975"/>
</kw>
<msg time="2026-04-25T23:42:17.409926" 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="PASS" start="2026-04-25T23:42:17.104441" elapsed="0.305573"/>
</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="PASS" start="2026-04-25T23:42:17.102431" elapsed="0.307875"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:17.411884" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:17.434545" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:17.435133" level="INFO">${stdout} = 1</msg>
<msg time="2026-04-25T23:42:17.435469" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:17.411465" elapsed="0.024257"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:17.438024" elapsed="0.000954"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.441298" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:17.440259" elapsed="0.001272"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:17.442428" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:17.441923" elapsed="0.000677"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:17.441796" elapsed="0.000964"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:17.443571" elapsed="0.000243"/>
</return>
<status status="PASS" start="2026-04-25T23:42:17.443083" elapsed="0.000850"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:17.442976" elapsed="0.001089"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:17.444248" elapsed="0.000104"/>
</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-25T23:42:17.449851" elapsed="0.000371"/>
</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-25T23:42:17.450436" elapsed="0.000173"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:17.450838" 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-25T23:42:17.446227" elapsed="0.004840"/>
</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="PASS" start="2026-04-25T23:42:17.093658" elapsed="0.357630"/>
</kw>
<msg time="2026-04-25T23:42:17.451610" 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="PASS" start="2026-04-25T23:42:17.092738" elapsed="0.359020"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:17.091378" elapsed="0.360469"/>
</kw>
<msg time="2026-04-25T23:42:17.451889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:17.090194" elapsed="0.361741"/>
</kw>
<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-25T23:42:17.454958" 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-25T23:42:17.455440" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:17.455840" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:17.452231" elapsed="0.003761"/>
</kw>
<msg time="2026-04-25T23:42:17.456090" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:17.087961" elapsed="0.368156"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.456569" level="INFO">1</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:17.456317" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:17.456656" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T23:42:17.456868" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:17.085779" elapsed="0.371115"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:17.456944" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:42:17.457094" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:17.083448" elapsed="0.373670"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<msg time="2026-04-25T23:42:17.457765" level="FAIL">Found running Karaf count: 1: 0 != 1</msg>
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="FAIL" start="2026-04-25T23:42:17.457346" elapsed="0.000497">Found running Karaf count: 1: 0 != 1</status>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="FAIL" start="2026-04-25T23:42:17.082286" elapsed="0.375671">Found running Karaf count: 1: 0 != 1</status>
</kw>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<kw name="Count_Running_Karafs_On_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.461566" level="INFO">${command} = ps axf | grep org.apache.karaf | grep -v grep | wc -l</msg>
<var>${command}</var>
<arg>${NODE_KARAF_COUNT_COMMAND}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:19.460809" elapsed="0.000826"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:19.463206" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:19.462817" elapsed="0.000426"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.464404" 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-25T23:42:19.464548" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:19.464179" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:19.470353" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:19.469687" elapsed="0.000747"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:19.469302" elapsed="0.001194"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.471992" 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-25T23:42:19.472242" 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-25T23:42:19.471532" elapsed="0.000814"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.473971" level="INFO">Attempting to execute command "ps axf | grep org.apache.karaf | grep -v grep | wc -l" on remote system "10.30.170.188" 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-25T23:42:19.473375" elapsed="0.000720"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.475838" level="INFO">${conn_id} = 187</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-25T23:42:19.475099" elapsed="0.000839"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.478492" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:19.478570" 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-25T23:42:19.478199" 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-25T23:42:19.478832" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.480093" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:19.786189" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:17 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:19.479768" elapsed="0.306653"/>
</kw>
<msg time="2026-04-25T23:42:19.786570" 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="PASS" start="2026-04-25T23:42:19.479390" elapsed="0.307360"/>
</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="PASS" start="2026-04-25T23:42:19.477301" elapsed="0.309948"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.789397" level="INFO">Executing command 'ps axf | grep org.apache.karaf | grep -v grep | wc -l'.</msg>
<msg time="2026-04-25T23:42:19.811846" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:19.812363" level="INFO">${stdout} = 0</msg>
<msg time="2026-04-25T23:42:19.812735" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:19.788854" elapsed="0.024096"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:19.815160" elapsed="0.000894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.818469" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:19.817397" elapsed="0.001334"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:19.819436" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:19.819082" elapsed="0.000462"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:19.818959" elapsed="0.000664"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:19.820125" elapsed="0.000076"/>
</return>
<status status="PASS" start="2026-04-25T23:42:19.819845" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:19.819776" elapsed="0.000573"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:19.820460" elapsed="0.000052"/>
</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-25T23:42:19.827083" elapsed="0.000363"/>
</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-25T23:42:19.827657" elapsed="0.000182"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:19.828034" 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-25T23:42:19.822398" elapsed="0.005846"/>
</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="PASS" start="2026-04-25T23:42:19.467329" elapsed="0.361134"/>
</kw>
<msg time="2026-04-25T23:42:19.828782" 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="PASS" start="2026-04-25T23:42:19.466352" elapsed="0.362488"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:19.465556" elapsed="0.363363"/>
</kw>
<msg time="2026-04-25T23:42:19.828959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:19.464832" elapsed="0.364171"/>
</kw>
<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-25T23:42:19.832101" elapsed="0.000318"/>
</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-25T23:42:19.832583" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:19.832894" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:19.829291" elapsed="0.003748"/>
</kw>
<msg time="2026-04-25T23:42:19.833129" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:19.463572" elapsed="0.369582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.833579" level="INFO">0</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:19.833330" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:19.833663" elapsed="0.000080"/>
</return>
<msg time="2026-04-25T23:42:19.833868" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>command=${command}</arg>
<arg>member_index=${member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-25T23:42:19.462197" elapsed="0.371696"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-25T23:42:19.833940" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:42:19.834115" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>member_index=${member_index}</arg>
<doc>Remotely execute grep for karaf process, return count as string.</doc>
<status status="PASS" start="2026-04-25T23:42:19.459946" elapsed="0.374194"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>0</arg>
<arg>${count}</arg>
<arg>Found running Karaf count: ${count}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-04-25T23:42:19.834298" elapsed="0.000356"/>
</kw>
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:19.458809" elapsed="0.375925"/>
</kw>
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:40:19.516103" elapsed="120.318679"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:40:19.515905" elapsed="120.318917"/>
</iter>
<var>${index}</var>
<value>@{stop_index_list}</value>
<status status="PASS" start="2026-04-25T23:40:16.352689" elapsed="123.482172"/>
</for>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.838326" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:19.837913" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.838844" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:19.838520" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:19.838915" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:19.839069" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:19.837442" elapsed="0.001652"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:19.840194" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:19.839924" elapsed="0.000296"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.841002" 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-25T23:42:19.841100" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:19.840867" elapsed="0.000259"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:19.843816" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:19.843505" elapsed="0.000370"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:19.843487" elapsed="0.000413"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.844365" 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-25T23:42:19.844473" 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-25T23:42:19.844048" elapsed="0.000451"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.845153" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.37" 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-25T23:42:19.844652" elapsed="0.000548"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.845792" level="INFO">${conn_id} = 190</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-25T23:42:19.845363" elapsed="0.000455"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:19.847087" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:19.847226" 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-25T23:42:19.846529" elapsed="0.000728"/>
</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-25T23:42:19.847462" elapsed="0.000716"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:19.850292" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:20.520310" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:19.849699" elapsed="0.671095"/>
</kw>
<msg time="2026-04-25T23:42:20.521049" 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="PASS" start="2026-04-25T23:42:19.848409" elapsed="0.672975"/>
</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="PASS" start="2026-04-25T23:42:19.846037" elapsed="0.675753"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:20.522955" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:42:20.535403" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:42:20.535644" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:20.535783" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:42:20.522352" elapsed="0.013485"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:20.536207" elapsed="0.000436"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:20.537848" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:20.537132" elapsed="0.000818"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:20.538415" elapsed="0.000078"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:20.538122" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:20.538073" elapsed="0.000551"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:20.539011" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-25T23:42:20.538777" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:20.538741" elapsed="0.000453"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:20.539269" elapsed="0.000031"/>
</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-25T23:42:20.556382" elapsed="0.000531"/>
</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-25T23:42:20.557085" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:20.557406" 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-25T23:42:20.540006" elapsed="0.017550"/>
</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="PASS" start="2026-04-25T23:42:19.842968" elapsed="0.714679"/>
</kw>
<msg time="2026-04-25T23:42:20.557717" 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="PASS" start="2026-04-25T23:42:19.842372" elapsed="0.715399"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:19.841803" elapsed="0.716045"/>
</kw>
<msg time="2026-04-25T23:42:20.557887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:19.841281" elapsed="0.716649"/>
</kw>
<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-25T23:42:20.561063" 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-25T23:42:20.561536" elapsed="0.000159"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:20.561844" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:20.558236" elapsed="0.003756"/>
</kw>
<msg time="2026-04-25T23:42:20.562081" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:19.840437" elapsed="0.721668"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:20.562562" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:20.562287" elapsed="0.000316"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:20.562645" elapsed="0.000045"/>
</return>
<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="PASS" start="2026-04-25T23:42:19.839490" elapsed="0.723296"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:19.839303" elapsed="0.723520"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:20.563863" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:20.563544" elapsed="0.000345"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:20.564647" 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-25T23:42:20.564791" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:20.564512" elapsed="0.000347"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:20.567661" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:20.567391" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:20.567373" elapsed="0.000409"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:20.568058" 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-25T23:42:20.568158" 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-25T23:42:20.567932" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:20.568815" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.80" 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-25T23:42:20.568335" elapsed="0.000526"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:20.569426" level="INFO">${conn_id} = 193</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-25T23:42:20.569018" elapsed="0.000434"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:20.570659" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:20.570799" 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-25T23:42:20.570109" elapsed="0.000715"/>
</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-25T23:42:20.571011" elapsed="0.000649"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:20.573925" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:21.301417" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:40:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:20.573328" elapsed="0.728362"/>
</kw>
<msg time="2026-04-25T23:42:21.301831" 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="PASS" start="2026-04-25T23:42:20.571905" elapsed="0.730121"/>
</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="PASS" start="2026-04-25T23:42:20.569683" elapsed="0.732525"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.302775" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:42:21.315957" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:42:21.316213" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:21.316314" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:42:21.302474" elapsed="0.013893"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.316799" elapsed="0.000479"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.318397" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:21.317733" elapsed="0.000768"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:21.319079" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:21.318716" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:21.318631" elapsed="0.000611"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:21.319484" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-25T23:42:21.319337" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:21.319315" elapsed="0.000288"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:21.319650" elapsed="0.000047"/>
</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-25T23:42:21.334725" elapsed="0.000587"/>
</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-25T23:42:21.335487" elapsed="0.000440"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.336084" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:21.320143" elapsed="0.016099"/>
</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="PASS" start="2026-04-25T23:42:20.566866" elapsed="0.769472"/>
</kw>
<msg time="2026-04-25T23:42:21.336394" 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="PASS" start="2026-04-25T23:42:20.566256" elapsed="0.770196"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:20.565518" elapsed="0.771017"/>
</kw>
<msg time="2026-04-25T23:42:21.336577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:20.565018" elapsed="0.771611"/>
</kw>
<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-25T23:42:21.339662" elapsed="0.000512"/>
</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-25T23:42:21.340340" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.340636" elapsed="0.000116"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:21.336945" elapsed="0.003859"/>
</kw>
<msg time="2026-04-25T23:42:21.340897" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:20.564107" elapsed="0.776815"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.341362" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:21.341104" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:21.341448" elapsed="0.000030"/>
</return>
<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="PASS" start="2026-04-25T23:42:20.563109" elapsed="0.778467"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:20.562915" elapsed="0.778700"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:21.342610" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:21.342333" elapsed="0.000304"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.343472" 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-25T23:42:21.343582" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.343331" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:21.346715" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:21.346410" elapsed="0.000364"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:21.346391" elapsed="0.000408"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.347114" 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-25T23:42:21.347216" 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-25T23:42:21.346981" elapsed="0.000262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.347895" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.188" 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-25T23:42:21.347397" elapsed="0.000545"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.348518" level="INFO">${conn_id} = 196</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-25T23:42:21.348103" elapsed="0.000441"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.349816" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:21.349942" 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-25T23:42:21.349259" elapsed="0.000708"/>
</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-25T23:42:21.350156" elapsed="0.000681"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.352973" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:21.667596" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:21.352398" elapsed="0.315438"/>
</kw>
<msg time="2026-04-25T23:42:21.667965" 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="PASS" start="2026-04-25T23:42:21.351113" elapsed="0.317024"/>
</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="PASS" start="2026-04-25T23:42:21.348819" elapsed="0.319491"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.668870" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:42:21.681631" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:42:21.681920" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:21.682021" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:42:21.668558" elapsed="0.013514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.682446" elapsed="0.000504"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.684110" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:21.683407" elapsed="0.000805"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:21.684723" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:21.684381" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:21.684332" elapsed="0.000558"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:21.685315" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-25T23:42:21.685014" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:21.684973" elapsed="0.000534"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:21.685581" elapsed="0.000032"/>
</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-25T23:42:21.702206" elapsed="0.000707"/>
</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-25T23:42:21.703166" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.703540" elapsed="0.000113"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:21.686353" elapsed="0.017378"/>
</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="PASS" start="2026-04-25T23:42:21.345874" elapsed="0.357961"/>
</kw>
<msg time="2026-04-25T23:42:21.703896" 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="PASS" start="2026-04-25T23:42:21.345270" elapsed="0.358684"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:21.344484" elapsed="0.359561"/>
</kw>
<msg time="2026-04-25T23:42:21.704092" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:21.343951" elapsed="0.360196"/>
</kw>
<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-25T23:42:21.708015" elapsed="0.000351"/>
</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-25T23:42:21.708638" elapsed="0.000197"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.709020" elapsed="0.000110"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:21.704491" elapsed="0.004701"/>
</kw>
<msg time="2026-04-25T23:42:21.709301" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:21.342905" elapsed="0.366426"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.709901" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:21.709569" elapsed="0.000380"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:21.710005" elapsed="0.000034"/>
</return>
<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="PASS" start="2026-04-25T23:42:21.341917" elapsed="0.368235"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:21.341730" elapsed="0.368465"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:19.839157" elapsed="1.871084"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:42:19.835123" elapsed="1.875197"/>
</kw>
<return>
<value>${updated_index_list}</value>
<status status="PASS" start="2026-04-25T23:42:21.710371" elapsed="0.000031"/>
</return>
<doc>If the list is empty, stops all ODL instances. Otherwise stop members based on ${stop_index_list}
If ${confirm} is True, verify stopped instances are not there anymore.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member_index_list}</doc>
<status status="PASS" start="2026-04-25T23:40:14.103792" elapsed="127.606733"/>
</kw>
<doc>Stop every odl node.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:40:14.103104" elapsed="127.607621"/>
</test>
<test id="s1-s1-t2" name="Set_Tell_Based_Protocol_Usage" line="34">
<kw name="Change_Use_Tell_Based_Protocol" owner="DdbCommons">
<kw name="Check_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-25T23:42:21.715769" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:21.715346" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.716270" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:21.715961" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:21.716371" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:42:21.716539" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:21.714876" elapsed="0.001688"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.718893" 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-25T23:42:21.718992" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:21.718753" elapsed="0.000265"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:21.720885" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:21.720539" elapsed="0.000373"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:21.720961" elapsed="0.000224"/>
</return>
<msg time="2026-04-25T23:42:21.721318" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:21.720214" elapsed="0.001131"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.724906" level="INFO">${odl_connection} = 199</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:21.724182" elapsed="0.000826"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:21.727999" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:21.728076" 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-25T23:42:21.727712" 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-25T23:42:21.728263" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:21.729500" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:22.039736" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:20 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:21.729176" elapsed="0.310705"/>
</kw>
<msg time="2026-04-25T23:42:22.039965" 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="PASS" start="2026-04-25T23:42:21.728768" elapsed="0.311287"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:21.727171" elapsed="0.312997"/>
</kw>
<msg time="2026-04-25T23:42:22.040221" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:21.726754" elapsed="0.313517"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:21.725842" elapsed="0.314603"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:22.040543" elapsed="0.000058"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:21.723003" elapsed="0.317875"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.044347" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=true/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:22.056803" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:22.057058" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:22.057154" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:22.057244" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:22.044147" elapsed="0.013147"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.059800" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:22.058638" elapsed="0.001271"/>
</kw>
<msg time="2026-04-25T23:42:22.060129" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:22.060227" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.057861" elapsed="0.002416"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.061908" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:22.060852" elapsed="0.001116"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.064583" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.064117" elapsed="0.000525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.065211" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.064876" elapsed="0.000390"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.065824" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.065474" elapsed="0.000409"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:22.063096" elapsed="0.002861"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:22.062267" elapsed="0.003739"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.062215" elapsed="0.003827"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:22.066334" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:22.066191" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.066165" elapsed="0.000263"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:22.066733" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.066568" elapsed="0.000250"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.066543" elapsed="0.000309"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.067124" elapsed="0.000032"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:22.043171" elapsed="0.024320"/>
</kw>
<msg time="2026-04-25T23:42:22.067726" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:22.067827" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.041167" elapsed="0.026709"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.068298" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:22.069021" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.068772" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.068745" elapsed="0.000488"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.069437" elapsed="0.000030"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:21.722069" elapsed="0.347636"/>
</kw>
<msg time="2026-04-25T23:42:22.069790" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:21.721513" elapsed="0.348348"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:21.719691" elapsed="0.350291"/>
</kw>
<msg time="2026-04-25T23:42:22.070041" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:21.719210" elapsed="0.350894"/>
</kw>
<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-25T23:42:22.073930" 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-25T23:42:22.074414" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.074747" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.070520" elapsed="0.004377"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:21.718116" elapsed="0.356839"/>
</kw>
<msg time="2026-04-25T23:42:22.075011" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:21.717657" elapsed="0.357403"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:21.716957" elapsed="0.358187"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:21.716799" elapsed="0.358392"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.077484" 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-25T23:42:22.077585" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.077344" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:22.079630" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.079315" elapsed="0.000342"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:22.079733" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:22.079888" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.078980" elapsed="0.000932"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.083358" level="INFO">${odl_connection} = 201</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.082629" elapsed="0.000826"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.086135" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:22.086213" 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-25T23:42:22.085860" 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-25T23:42:22.086398" elapsed="0.000332"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.087589" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:22.417641" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:21 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:22.087272" elapsed="0.330535"/>
</kw>
<msg time="2026-04-25T23:42:22.417887" 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="PASS" start="2026-04-25T23:42:22.086903" elapsed="0.331071"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:22.085354" elapsed="0.332730"/>
</kw>
<msg time="2026-04-25T23:42:22.418137" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.084965" elapsed="0.333222"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:22.084070" elapsed="0.334307"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:22.418472" elapsed="0.000057"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:22.081511" elapsed="0.337290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.421967" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=true/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:22.434580" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:22.434715" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:22.434765" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:22.434808" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:22.421770" elapsed="0.013060"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.436299" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:22.435644" elapsed="0.000756"/>
</kw>
<msg time="2026-04-25T23:42:22.436608" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:22.436770" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.435065" elapsed="0.001762"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.438356" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:22.437325" elapsed="0.001092"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.441253" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.440593" elapsed="0.000763"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.442347" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.441764" elapsed="0.000681"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.443414" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.442840" elapsed="0.000748"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:22.439598" elapsed="0.004153"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:22.438751" elapsed="0.005089"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.438696" elapsed="0.005206"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:22.444334" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:22.444163" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.444119" elapsed="0.000283"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:22.444598" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.444506" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.444489" elapsed="0.000224"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.444912" elapsed="0.000081"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:22.420837" elapsed="0.024387"/>
</kw>
<msg time="2026-04-25T23:42:22.445374" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:22.445447" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.419088" elapsed="0.026397"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.445769" elapsed="0.000220"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:22.446290" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.446108" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.446088" elapsed="0.000361"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.446596" elapsed="0.000022"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:22.080595" elapsed="0.366199"/>
</kw>
<msg time="2026-04-25T23:42:22.446854" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.080071" elapsed="0.366837"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:22.078430" elapsed="0.368566"/>
</kw>
<msg time="2026-04-25T23:42:22.447038" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.077783" elapsed="0.369301"/>
</kw>
<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-25T23:42:22.450172" 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-25T23:42:22.450658" elapsed="0.000174"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.450983" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.447386" elapsed="0.003744"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:22.076721" elapsed="0.374467"/>
</kw>
<msg time="2026-04-25T23:42:22.451244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.076257" elapsed="0.375036"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:22.075489" elapsed="0.375887"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:22.075327" elapsed="0.376096"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.453630" 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-25T23:42:22.453796" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.453493" elapsed="0.000330"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:22.455922" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.455590" elapsed="0.000359"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:22.455998" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:22.456193" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.455214" elapsed="0.001004"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.459747" level="INFO">${odl_connection} = 203</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.459017" elapsed="0.000829"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.462482" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:22.462559" 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-25T23:42:22.462214" 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-25T23:42:22.462757" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.463973" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:22.788052" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:21 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:22.463636" elapsed="0.324566"/>
</kw>
<msg time="2026-04-25T23:42:22.788286" 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="PASS" start="2026-04-25T23:42:22.463252" elapsed="0.325122"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:22.461716" elapsed="0.326773"/>
</kw>
<msg time="2026-04-25T23:42:22.788545" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.461306" elapsed="0.327290"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:22.460397" elapsed="0.328401"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:22.788897" elapsed="0.000059"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:22.457870" elapsed="0.331344"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.792486" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=true/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:22.805068" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:22.805329" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:22.805427" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:22.805516" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:22.792283" elapsed="0.013282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.807577" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:22.806959" elapsed="0.000801"/>
</kw>
<msg time="2026-04-25T23:42:22.807980" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:22.808077" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.806136" elapsed="0.001990"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.809703" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:22.808623" elapsed="0.001143"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.812393" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.811868" elapsed="0.000585"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.813048" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.812704" elapsed="0.000401"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.813643" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:22.813316" elapsed="0.000408"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:22.810867" elapsed="0.002932"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:22.810060" elapsed="0.003866"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.810012" elapsed="0.003956"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:22.814263" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:22.814120" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.814093" elapsed="0.000262"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:22.814620" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.814494" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.814470" elapsed="0.000290"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.815036" elapsed="0.000031"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:22.791302" elapsed="0.024071"/>
</kw>
<msg time="2026-04-25T23:42:22.815579" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:22.815725" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:22.789508" elapsed="0.026273"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.816140" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:22.816881" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:42:22.816600" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:22.816573" elapsed="0.000521"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:22.817302" elapsed="0.000031"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:22.456940" elapsed="0.360613"/>
</kw>
<msg time="2026-04-25T23:42:22.817636" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.456383" elapsed="0.361346"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:22.454441" elapsed="0.363410"/>
</kw>
<msg time="2026-04-25T23:42:22.817909" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.453979" elapsed="0.363993"/>
</kw>
<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-25T23:42:22.822271" elapsed="0.000471"/>
</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-25T23:42:22.822977" elapsed="0.000212"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.823396" elapsed="0.000132"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.818387" elapsed="0.005211"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:22.452875" elapsed="0.370908"/>
</kw>
<msg time="2026-04-25T23:42:22.823872" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.452408" elapsed="0.371534"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:22.451704" elapsed="0.372354"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:22.451532" elapsed="0.372590"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:21.716631" elapsed="1.107539"/>
</for>
<arg>sed -ie "s/^#use-tell-based-protocol=true/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:21.712432" elapsed="1.111822"/>
</kw>
<kw name="Check_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-25T23:42:22.828106" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:22.827718" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.828644" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:22.828332" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:22.828731" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:22.828887" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:22.827307" elapsed="0.001604"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.831165" 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-25T23:42:22.831265" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:22.831028" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:22.833157" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.832850" elapsed="0.000335"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:22.833233" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:22.833383" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:22.832503" elapsed="0.000904"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.836900" level="INFO">${odl_connection} = 205</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:22.836195" elapsed="0.000803"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:22.839794" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:22.839871" 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-25T23:42:22.839487" 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-25T23:42:22.840053" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:22.841235" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:23.159851" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:21 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:22.840918" elapsed="0.319064"/>
</kw>
<msg time="2026-04-25T23:42:23.160060" 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="PASS" start="2026-04-25T23:42:22.840537" elapsed="0.319606"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:22.838988" elapsed="0.321263"/>
</kw>
<msg time="2026-04-25T23:42:23.160304" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.838425" elapsed="0.321928"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:22.837534" elapsed="0.322984"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:23.160614" elapsed="0.000081"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:22.835036" elapsed="0.325916"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.164119" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=false/use-tell-based-protocol=false/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:23.176777" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:23.177027" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:23.177125" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:23.177215" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:23.163918" elapsed="0.013347"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.179231" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:23.178593" elapsed="0.000738"/>
</kw>
<msg time="2026-04-25T23:42:23.179539" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:23.179637" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.177816" elapsed="0.001904"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.181248" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:23.180243" elapsed="0.001064"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.184027" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.183342" elapsed="0.000783"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.186373" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.184422" elapsed="0.002009"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.186901" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.186605" elapsed="0.000341"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:23.182388" elapsed="0.004615"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:23.181595" elapsed="0.005445"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.181548" elapsed="0.005521"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:23.187308" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:23.187194" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.187174" elapsed="0.000203"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:23.187568" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.187477" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.187460" elapsed="0.000196"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.187889" elapsed="0.000023"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:23.162971" elapsed="0.025164"/>
</kw>
<msg time="2026-04-25T23:42:23.188283" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:23.188358" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.161247" elapsed="0.027147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.188650" elapsed="0.000244"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:23.189194" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.189011" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.188992" elapsed="0.000355"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.189497" elapsed="0.000021"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:22.834110" elapsed="0.355581"/>
</kw>
<msg time="2026-04-25T23:42:23.189751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.833562" elapsed="0.356241"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:22.831948" elapsed="0.357937"/>
</kw>
<msg time="2026-04-25T23:42:23.189926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.831447" elapsed="0.358523"/>
</kw>
<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-25T23:42:23.193009" elapsed="0.000318"/>
</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-25T23:42:23.193493" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.193817" elapsed="0.000149"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.190271" elapsed="0.003747"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:22.830399" elapsed="0.363676"/>
</kw>
<msg time="2026-04-25T23:42:23.194129" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:22.829957" elapsed="0.364219"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:22.829254" elapsed="0.365004"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:22.829100" elapsed="0.365204"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.196529" 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-25T23:42:23.196630" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.196394" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:23.198514" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.198207" elapsed="0.000334"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:23.198589" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:42:23.198761" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.197885" elapsed="0.000900"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.202269" level="INFO">${odl_connection} = 207</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.201565" elapsed="0.000803"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.205379" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:23.205456" 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-25T23:42:23.205104" 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-25T23:42:23.205638" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.206865" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:23.522443" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:22 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:23.206510" elapsed="0.316051"/>
</kw>
<msg time="2026-04-25T23:42:23.522637" 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="PASS" start="2026-04-25T23:42:23.206150" elapsed="0.316579"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:23.204591" elapsed="0.318245"/>
</kw>
<msg time="2026-04-25T23:42:23.522889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.204007" elapsed="0.318932"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:23.203095" elapsed="0.320074"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:23.523266" elapsed="0.000057"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:23.200435" elapsed="0.323131"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.526782" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=false/use-tell-based-protocol=false/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:23.539491" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:23.539779" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:23.539881" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:23.539972" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:23.526569" elapsed="0.013475"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.542067" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:23.541417" elapsed="0.000751"/>
</kw>
<msg time="2026-04-25T23:42:23.542382" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:23.542479" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.540601" elapsed="0.001927"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.544066" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:23.543051" elapsed="0.001080"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.546774" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.546184" elapsed="0.000686"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.547788" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.547215" elapsed="0.000664"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.548912" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.548267" elapsed="0.000706"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:23.545228" elapsed="0.003821"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:23.544426" elapsed="0.004673"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.544375" elapsed="0.004760"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:23.549434" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:23.549290" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.549263" elapsed="0.000266"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:23.549830" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.549697" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.549647" elapsed="0.000299"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.550224" elapsed="0.000031"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:23.525629" elapsed="0.024937"/>
</kw>
<msg time="2026-04-25T23:42:23.550798" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:23.550898" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.523884" elapsed="0.027073"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.551320" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:23.552105" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.551823" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.551796" elapsed="0.000530"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.552533" elapsed="0.000031"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:23.199472" elapsed="0.353339"/>
</kw>
<msg time="2026-04-25T23:42:23.552892" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.198945" elapsed="0.354015"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:23.197342" elapsed="0.355737"/>
</kw>
<msg time="2026-04-25T23:42:23.553136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.196877" elapsed="0.356371"/>
</kw>
<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-25T23:42:23.557607" elapsed="0.000486"/>
</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-25T23:42:23.558327" elapsed="0.000219"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.558779" elapsed="0.000135"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.553668" elapsed="0.005319"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:23.195735" elapsed="0.363332"/>
</kw>
<msg time="2026-04-25T23:42:23.559143" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.195274" elapsed="0.363935"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:23.194558" elapsed="0.364768"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:23.194396" elapsed="0.364993"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.562010" 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-25T23:42:23.562112" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.561872" elapsed="0.000266"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:23.563944" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.563620" elapsed="0.000350"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:23.564019" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T23:42:23.564190" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.563298" elapsed="0.000917"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.567709" level="INFO">${odl_connection} = 209</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.566971" elapsed="0.000841"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.570682" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:23.570763" 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-25T23:42:23.570400" 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-25T23:42:23.570950" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.572164" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:23.881244" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:22 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:23.571832" elapsed="0.309539"/>
</kw>
<msg time="2026-04-25T23:42:23.881450" 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="PASS" start="2026-04-25T23:42:23.571444" elapsed="0.310087"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:23.569903" elapsed="0.311838"/>
</kw>
<msg time="2026-04-25T23:42:23.881794" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.569288" elapsed="0.312558"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:23.568394" elapsed="0.313630"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:23.882122" elapsed="0.000057"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:23.565849" elapsed="0.316581"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.885593" level="INFO">Executing command 'sed -ie "s/^#use-tell-based-protocol=false/use-tell-based-protocol=false/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:23.898547" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:23.898773" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:23.898841" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:23.898901" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:23.885392" elapsed="0.013544"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.900330" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:23.899861" elapsed="0.000539"/>
</kw>
<msg time="2026-04-25T23:42:23.900542" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:23.900606" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.899291" elapsed="0.001348"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.901653" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:23.900992" elapsed="0.000722"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.903441" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.903071" elapsed="0.000432"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.904107" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.903751" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.905107" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:23.904432" elapsed="0.000742"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:23.902438" elapsed="0.002817"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:23.901917" elapsed="0.003391"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.901881" elapsed="0.003469"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:23.905689" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:23.905515" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.905486" elapsed="0.000308"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:23.906087" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.905948" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.905922" elapsed="0.000291"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.906506" elapsed="0.000033"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:23.884458" elapsed="0.022436"/>
</kw>
<msg time="2026-04-25T23:42:23.907112" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:23.907215" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:23.882726" elapsed="0.024542"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.907649" elapsed="0.000337"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:23.908443" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:42:23.908160" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:23.908132" elapsed="0.000562"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:23.908918" elapsed="0.000031"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:23.564928" elapsed="0.344257"/>
</kw>
<msg time="2026-04-25T23:42:23.909271" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.564374" elapsed="0.345032"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:23.562774" elapsed="0.346763"/>
</kw>
<msg time="2026-04-25T23:42:23.909597" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.562293" elapsed="0.347371"/>
</kw>
<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-25T23:42:23.913994" 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-25T23:42:23.914482" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.914808" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.910129" elapsed="0.004829"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:23.561196" elapsed="0.353821"/>
</kw>
<msg time="2026-04-25T23:42:23.915073" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.560747" elapsed="0.354377"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:23.559758" elapsed="0.355451"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:23.559519" elapsed="0.355737"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:22.828966" elapsed="1.086328"/>
</for>
<arg>sed -ie "s/^#use-tell-based-protocol=false/use-tell-based-protocol=false/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:22.824592" elapsed="1.090763"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Check_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-25T23:42:23.919342" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:23.918958" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.919857" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:23.919530" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:23.919927" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:23.920081" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:23.918561" elapsed="0.001545"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.922421" 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-25T23:42:23.922521" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:23.922283" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:23.924580" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.924113" elapsed="0.000527"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:23.924882" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:42:23.925040" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:23.923716" elapsed="0.001349"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.929027" level="INFO">${odl_connection} = 211</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:23.928626" elapsed="0.000427"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:23.930842" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:23.930919" 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-25T23:42:23.930557" elapsed="0.000386"/>
</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-25T23:42:23.931102" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:23.932322" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:24.250408" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:23 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:23.931971" elapsed="0.318580"/>
</kw>
<msg time="2026-04-25T23:42:24.250635" 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="PASS" start="2026-04-25T23:42:23.931594" elapsed="0.319149"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:23.930067" elapsed="0.320793"/>
</kw>
<msg time="2026-04-25T23:42:24.250915" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.929635" elapsed="0.321333"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:23.929255" elapsed="0.321789"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:24.251143" elapsed="0.000049"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:23.927928" elapsed="0.323501"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.254248" level="INFO">Executing command 'sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:24.267101" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:24.267225" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:24.267269" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:24.267310" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:24.254052" elapsed="0.013280"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.268171" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:24.267885" elapsed="0.000331"/>
</kw>
<msg time="2026-04-25T23:42:24.268311" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:24.268355" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:24.267515" elapsed="0.000863"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.269050" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:24.268579" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.270189" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.269936" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.270618" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.270382" elapsed="0.000276"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.271059" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.270824" elapsed="0.000277"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:24.269513" elapsed="0.001641"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:24.269164" elapsed="0.002025"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.269141" elapsed="0.002075"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:24.271373" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:24.271273" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.271256" elapsed="0.000239"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:24.271642" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-25T23:42:24.271552" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.271536" elapsed="0.000206"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:24.271889" elapsed="0.000022"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:24.253488" elapsed="0.018519"/>
</kw>
<msg time="2026-04-25T23:42:24.272246" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:24.272328" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:24.252584" elapsed="0.019785"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.273379" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:24.274121" elapsed="0.000060"/>
</return>
<status status="PASS" start="2026-04-25T23:42:24.273935" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.273876" elapsed="0.000390"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:24.275250" elapsed="0.000038"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:23.925988" elapsed="0.349469"/>
</kw>
<msg time="2026-04-25T23:42:24.275856" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.925227" elapsed="0.350685"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:23.923175" elapsed="0.352831"/>
</kw>
<msg time="2026-04-25T23:42:24.276049" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.922717" elapsed="0.353378"/>
</kw>
<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-25T23:42:24.279231" 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-25T23:42:24.279717" elapsed="0.000156"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.280022" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:24.276394" elapsed="0.003774"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:23.921645" elapsed="0.358579"/>
</kw>
<msg time="2026-04-25T23:42:24.280279" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.921200" elapsed="0.359128"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:23.920485" elapsed="0.359942"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:23.920329" elapsed="0.360145"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.283027" 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-25T23:42:24.283142" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.282865" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:24.285748" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:24.285112" elapsed="0.000704"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:24.286113" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:42:24.286294" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:24.284603" elapsed="0.001718"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.290517" level="INFO">${odl_connection} = 213</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:24.290136" elapsed="0.000408"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.292354" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:24.292458" 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-25T23:42:24.292085" elapsed="0.000404"/>
</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-25T23:42:24.292648" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.293844" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:24.630297" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:23 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:24.293510" elapsed="0.336955"/>
</kw>
<msg time="2026-04-25T23:42:24.630555" 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="PASS" start="2026-04-25T23:42:24.293155" elapsed="0.337494"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:24.291541" elapsed="0.339251"/>
</kw>
<msg time="2026-04-25T23:42:24.630848" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.291147" elapsed="0.339768"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:24.290760" elapsed="0.340243"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:24.631112" elapsed="0.000049"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:24.289448" elapsed="0.341962"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.634418" level="INFO">Executing command 'sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:24.647326" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:24.647585" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:24.647724" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:24.647824" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:24.634204" elapsed="0.013670"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.650630" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:24.650005" elapsed="0.000763"/>
</kw>
<msg time="2026-04-25T23:42:24.650990" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:24.651092" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:24.648390" elapsed="0.002755"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.652736" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:24.651593" elapsed="0.001208"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.655404" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.654825" elapsed="0.000676"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.656492" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.655935" elapsed="0.000651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.657537" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:24.657165" elapsed="0.000417"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:24.653810" elapsed="0.003825"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:24.652991" elapsed="0.004694"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.652941" elapsed="0.004772"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:24.657872" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:24.657770" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.657753" elapsed="0.000185"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:24.658077" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:42:24.657989" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.657974" elapsed="0.000186"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:24.658307" elapsed="0.000022"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:24.633600" elapsed="0.024823"/>
</kw>
<msg time="2026-04-25T23:42:24.658686" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:24.658774" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:24.632565" elapsed="0.026250"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.659817" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:24.660541" elapsed="0.000061"/>
</return>
<status status="PASS" start="2026-04-25T23:42:24.660349" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:24.660290" elapsed="0.000433"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:24.661731" elapsed="0.000039"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:24.287260" elapsed="0.374681"/>
</kw>
<msg time="2026-04-25T23:42:24.662331" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.286506" elapsed="0.375881"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:24.283914" elapsed="0.378558"/>
</kw>
<msg time="2026-04-25T23:42:24.662514" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.283352" elapsed="0.379206"/>
</kw>
<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-25T23:42:24.665692" elapsed="0.000343"/>
</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-25T23:42:24.666208" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.666524" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:24.662872" elapsed="0.003818"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:24.282008" elapsed="0.384743"/>
</kw>
<msg time="2026-04-25T23:42:24.666807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.281446" elapsed="0.385411"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:24.280746" elapsed="0.386196"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:24.280572" elapsed="0.386417"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.669424" 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-25T23:42:24.669529" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:24.669235" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:24.671617" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:24.671161" elapsed="0.000634"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:24.672025" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T23:42:24.672201" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:24.670753" elapsed="0.001473"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.676253" level="INFO">${odl_connection} = 215</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:24.675862" elapsed="0.000419"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:24.678184" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:24.678262" 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-25T23:42:24.677920" 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-25T23:42:24.678446" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:24.679643" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:25.022124" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:23 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:24.679322" elapsed="0.342970"/>
</kw>
<msg time="2026-04-25T23:42:25.022386" 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="PASS" start="2026-04-25T23:42:24.678959" elapsed="0.343568"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:24.677415" elapsed="0.345249"/>
</kw>
<msg time="2026-04-25T23:42:25.022753" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.676972" elapsed="0.345845"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:24.676510" elapsed="0.346394"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:25.023014" elapsed="0.000057"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:24.674922" elapsed="0.348406"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.026224" level="INFO">Executing command 'sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:25.039572" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:25.039928" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:25.040037" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:25.040147" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:25.025999" elapsed="0.014207"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.042865" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:25.041591" elapsed="0.001387"/>
</kw>
<msg time="2026-04-25T23:42:25.043248" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:25.043411" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.040652" elapsed="0.002818"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.045094" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:25.043936" elapsed="0.001332"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.048261" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.047546" elapsed="0.000821"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.048926" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.048657" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.049386" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.049141" elapsed="0.000289"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:25.046415" elapsed="0.003069"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:25.045489" elapsed="0.004032"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.045425" elapsed="0.004125"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:25.049735" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:25.049610" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.049593" elapsed="0.000214"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:25.049951" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.049859" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.049843" elapsed="0.000197"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.050209" elapsed="0.000025"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:25.025413" elapsed="0.024923"/>
</kw>
<msg time="2026-04-25T23:42:25.050592" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:25.050680" level="INFO">${result} = </msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.024472" elapsed="0.026276"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.051813" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:25.052582" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.052371" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.052307" elapsed="0.000450"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.053783" elapsed="0.000040"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:24.672967" elapsed="0.381029"/>
</kw>
<msg time="2026-04-25T23:42:25.054385" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.672388" elapsed="0.382056"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:24.670202" elapsed="0.384332"/>
</kw>
<msg time="2026-04-25T23:42:25.054578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.669730" elapsed="0.384895"/>
</kw>
<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-25T23:42:25.057887" elapsed="0.000336"/>
</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-25T23:42:25.058400" elapsed="0.000169"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.058831" elapsed="0.000109"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.054968" elapsed="0.004025"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:24.668546" elapsed="0.390505"/>
</kw>
<msg time="2026-04-25T23:42:25.059109" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:24.668086" elapsed="0.391074"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:24.667251" elapsed="0.392054"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:24.667090" elapsed="0.392264"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:23.920161" elapsed="1.139232"/>
</for>
<arg>sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:23.916037" elapsed="1.143417"/>
</kw>
<msg time="2026-04-25T23:42:25.059494" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"${status}" == "True"</arg>
<arg>ClusterManagement.Check_Bash_Command_On_List_Or_All</arg>
<arg>sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:23.915518" elapsed="1.144025"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"${status}" == "False"</arg>
<arg>ClusterManagement.Check_Bash_Command_On_List_Or_All</arg>
<arg>sed -ie "s/^use-tell-based-protocol=true/use-tell-based-protocol=false/g" ${DATASTORE_CFG}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.059738" elapsed="0.000024"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Failure in status. Status can be True or False.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.059918" elapsed="0.000020"/>
</kw>
<arg>True</arg>
<arg>${DATASTORE_CFG}</arg>
<doc>Change status use-tell-based-protocol to True or False</doc>
<status status="PASS" start="2026-04-25T23:42:21.711996" elapsed="3.348013"/>
</kw>
<kw name="Check_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-25T23:42:25.063634" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:25.063234" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.064299" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:25.063943" elapsed="0.000382"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:25.064371" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:25.064529" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:25.062835" elapsed="0.001718"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.066991" 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-25T23:42:25.067099" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.066846" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:25.069224" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.068943" elapsed="0.000308"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:25.069301" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:25.069476" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.068352" elapsed="0.001151"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.072183" level="INFO">${odl_connection} = 217</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.071408" elapsed="0.000816"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.075442" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:25.075529" 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-25T23:42:25.075161" 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-25T23:42:25.075742" elapsed="0.000331"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.077016" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:25.399975" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:24 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:25.076641" elapsed="0.323601"/>
</kw>
<msg time="2026-04-25T23:42:25.400328" 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="PASS" start="2026-04-25T23:42:25.076266" elapsed="0.324154"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:25.074622" elapsed="0.325915"/>
</kw>
<msg time="2026-04-25T23:42:25.400644" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.073885" elapsed="0.326853"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:25.072490" elapsed="0.328380"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:25.400969" elapsed="0.000047"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:25.070984" elapsed="0.330174"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.406372" level="INFO">Executing command 'cat //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:25.418819" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:25.419199" level="INFO">${stdout} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<msg time="2026-04-25T23:42:25.419411" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:25.419671" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:25.406022" elapsed="0.013817"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.423680" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:25.423045" elapsed="0.000786"/>
</kw>
<msg time="2026-04-25T23:42:25.424312" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:25.424642" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.421801" elapsed="0.003168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.428666" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:25.427192" elapsed="0.001660"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.430650" level="INFO"># This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# differently for each data store type by prefixing the data store type + '.'. For example, specifying
# the "shard-election-timeout-factor" property would be applied to both data stores whereas specifying
# "operational.shard-election-timeout-factor" would only apply to the "operational" data store. Similarly,
# specifying "config.shard-election-timeout-factor" would only apply to the "config" data store.
# Overall flexibility goes even further, as these overrides can also be combined with per-shard specification,
# so that you can also use:
#   &lt;shard-name&gt;.&lt;setting&gt;
#   &lt;datastore-name&gt;.&lt;shard-name&gt;.&lt;setting&gt;
# for example:
#   topology.shard-election-timeout-factor=2             # override both config/operational for topology shard
#   config.topology.shard-election-timeout-factor=5      # override config for topology shard
#   operational.topology.shard-election-timeout-factor=7 # override operational for topology shard
#

# The multiplication factor to be used to determine shard election timeout. The shard election timeout
# is determined by multiplying shardHeartbeatIntervalInMillis with the shardElectionTimeoutFactor.
shard-election-timeout-factor=20

# The interval at which a shard will send a heart beat message to its remote shard.
#shard-heartbeat-interval-in-millis=500

# The amount by which to divide election timeout in case of a candidate. This serves as a counter-balance
# to shard-election-timeout-factor. The default value is 1, i.e. election timeout is the same in all
# situations.
#shard-candidate-election-timeout-divisor=1

# The maximum amount of time to wait for a shard to elect a leader before failing an operation (eg transaction create).
#shard-leader-election-timeout-in-seconds=30

# Enable or disable data persistence.
#persistent=true

# Disable persistence for the operational data store by default.
operational.persistent=false

# The maximum amount of time a shard transaction can be idle without receiving any messages before it self-destructs.
#shard-transaction-idle-timeout-in-minutes=10

# The maximum amount of time a shard transaction three-phase commit can be idle without receiving the
# next messages before it aborts the transaction.
#shard-transaction-commit-timeout-in-seconds=30

# The maximum allowed capacity for each shard's transaction commit queue.
#shard-transaction-commit-queue-capacity=20000

# The maximum amount of time to wait for a shard to initialize from persistence on startup before
# failing an operation (eg transaction create and change listener registration).
#shard-initialization-timeout-in-seconds=300

# The minimum number of entries to be present in the in-memory journal log before a snapshot is to be taken.
#shard-snapshot-batch-count=20000

# The percentage of Runtime.totalMemory() used by the in-memory journal log before a snapshot is to be taken.
# Disabled, if direct threshold is enabled.
#shard-snapshot-data-threshold-percentage=12

# The max size of in-memory journal(in MB), after reaching the limit, snapshot will be taken. Should be not less then 1.
# If set to 0, direct threshold is disabled and percentage is used instead.
#shard-snapshot-data-threshold=0

# The interval at which the leader of the shard will check if its majority followers are active and
# term itself as isolated.
#shard-isolated-leader-check-interval-in-millis=5000

# The number of transaction modification operations (put, merge, delete) to batch before sending to the
# shard transaction actor. Batching improves performance as less modifications messages are sent to the
# actor and thus lessens the chance that the transaction actor's mailbox queue could get full.
#shard-batched-modification-count=1000

# The maximum amount of time for akka operations (remote or local) to complete before failing.
#operation-timeout-in-seconds=5

# Obsolete: this knob will be removed in a future release.
#
# The initial number of transactions per second that are allowed before the data store should begin
# applying back pressure. This number is only used as an initial guidance, subsequently the datastore
# measures the latency for a commit and auto-adjusts the rate limit.
#transaction-creation-initial-rate-limit=100

# A symbolic name for the RaftPolicy implementation to use. An instance with this name should
# be made available as a service. If this property is set to a name that cannot be resolved,
# then the normal RAFT behavior will be used. Symbolic names recognized out of the box are:
# - normal
# - disable-elections
# - two-node-cluster
#custom-raft-policy-implementation=

# When fragmenting messages thru the akka remoting framework, this is the maximum size in bytes
# for a message slice. This needs to be below Akka's maximum-frame-size and defaults to 480KiB.
maximum-message-slice-size=491520

# Tune the maximum number of entries a follower is allowed to lag behind the leader before it is
# considered out-of-sync. This flag may require tuning in face of a large number of small transactions.
#sync-index-threshold=10

# Record new transaction allocation stack trace, useful for debugging.  This makes the log include
# the stack trace of the creator of the Tx when there is an exception when the transaction is submitted 
# (e.g. for a failed validation).  Defaults to false due to performance impact.
#transaction-debug-context-enabled=true

# Multiplicator of shard-leader-election-timeout-in-seconds for the purposes of initial datastore
# convergence. Each frontend datastore instance will wait specified amount of time before becoming
# exposed as a service. A value of 0 indicates waiting forever. Defaults to 3.
#initial-settle-timeout-multiplier=3

#Interval after which a snapshot should be taken during the recovery process.
#recovery-snapshot-interval-seconds=0

# Option to take a snapshot when the entire DataTree root or top-level container is overwritten
snapshot-on-root-overwrite=false

# Enable lz4 compression for snapshots sent from leader to followers
#use-lz4-compression=true

# Export snapshot and journal content after recovery, possible modes: off, json
#
# Journal Json structure:
#       Entries : [
#            Entry : [
#                Node: [
#                   Path : {},
#                   ModificationType : {},
#                   Data : {}
#                ]
#            ]
#        ]
#
# Snapshot Json structure:
#       RootNode : {}
#
export-on-recovery=off

# Directory name for export files
#recovery-export-base-dir=persistence-export</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.430391" elapsed="0.000414"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.431206" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.430963" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.431654" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.431414" elapsed="0.000288"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:25.429940" elapsed="0.001874"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:25.429017" elapsed="0.002842"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.428963" elapsed="0.002956"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:25.432305" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:25.432073" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.432024" elapsed="0.000414"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:25.432850" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.432589" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.432541" elapsed="0.000467"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.433983" elapsed="0.000055"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:25.404061" elapsed="0.030197"/>
</kw>
<msg time="2026-04-25T23:42:25.434498" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:25.434544" level="INFO">${result} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.401403" elapsed="0.033166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.434749" elapsed="0.000209"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:25.435135" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.435023" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.435005" elapsed="0.000212"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.435363" elapsed="0.000021"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:25.070231" elapsed="0.365248"/>
</kw>
<msg time="2026-04-25T23:42:25.435575" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.069671" elapsed="0.365955"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:25.067799" elapsed="0.368064"/>
</kw>
<msg time="2026-04-25T23:42:25.435943" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.067307" elapsed="0.368681"/>
</kw>
<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-25T23:42:25.439131" 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-25T23:42:25.439603" elapsed="0.000177"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.439931" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.436278" elapsed="0.003799"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:25.066179" elapsed="0.374087"/>
</kw>
<msg time="2026-04-25T23:42:25.440359" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.065683" elapsed="0.374725"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:25.064969" elapsed="0.375685"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:25.064785" elapsed="0.376053"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.443021" 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-25T23:42:25.443121" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.442884" elapsed="0.000263"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:25.445040" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.444632" elapsed="0.000435"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:25.445115" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:25.445267" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.444306" elapsed="0.000986"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.448114" level="INFO">${odl_connection} = 219</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.447377" elapsed="0.000778"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.451237" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:25.451314" 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-25T23:42:25.450965" elapsed="0.000373"/>
</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-25T23:42:25.451496" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.452686" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:25.796584" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:24 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:25.452363" elapsed="0.344397"/>
</kw>
<msg time="2026-04-25T23:42:25.796846" 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="PASS" start="2026-04-25T23:42:25.452007" elapsed="0.344930"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:25.450456" elapsed="0.346600"/>
</kw>
<msg time="2026-04-25T23:42:25.797156" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.449741" elapsed="0.347490"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:25.448419" elapsed="0.348941"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:25.797462" elapsed="0.000047"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:25.446964" elapsed="0.350682"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.801387" level="INFO">Executing command 'cat //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:25.813589" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:25.814239" level="INFO">${stdout} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<msg time="2026-04-25T23:42:25.814580" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:25.814954" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:25.800808" elapsed="0.014360"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.818694" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:25.818293" elapsed="0.000566"/>
</kw>
<msg time="2026-04-25T23:42:25.819167" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:25.819380" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.817508" elapsed="0.002006"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.822053" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:25.820984" elapsed="0.001209"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.824838" level="INFO"># This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# differently for each data store type by prefixing the data store type + '.'. For example, specifying
# the "shard-election-timeout-factor" property would be applied to both data stores whereas specifying
# "operational.shard-election-timeout-factor" would only apply to the "operational" data store. Similarly,
# specifying "config.shard-election-timeout-factor" would only apply to the "config" data store.
# Overall flexibility goes even further, as these overrides can also be combined with per-shard specification,
# so that you can also use:
#   &lt;shard-name&gt;.&lt;setting&gt;
#   &lt;datastore-name&gt;.&lt;shard-name&gt;.&lt;setting&gt;
# for example:
#   topology.shard-election-timeout-factor=2             # override both config/operational for topology shard
#   config.topology.shard-election-timeout-factor=5      # override config for topology shard
#   operational.topology.shard-election-timeout-factor=7 # override operational for topology shard
#

# The multiplication factor to be used to determine shard election timeout. The shard election timeout
# is determined by multiplying shardHeartbeatIntervalInMillis with the shardElectionTimeoutFactor.
shard-election-timeout-factor=20

# The interval at which a shard will send a heart beat message to its remote shard.
#shard-heartbeat-interval-in-millis=500

# The amount by which to divide election timeout in case of a candidate. This serves as a counter-balance
# to shard-election-timeout-factor. The default value is 1, i.e. election timeout is the same in all
# situations.
#shard-candidate-election-timeout-divisor=1

# The maximum amount of time to wait for a shard to elect a leader before failing an operation (eg transaction create).
#shard-leader-election-timeout-in-seconds=30

# Enable or disable data persistence.
#persistent=true

# Disable persistence for the operational data store by default.
operational.persistent=false

# The maximum amount of time a shard transaction can be idle without receiving any messages before it self-destructs.
#shard-transaction-idle-timeout-in-minutes=10

# The maximum amount of time a shard transaction three-phase commit can be idle without receiving the
# next messages before it aborts the transaction.
#shard-transaction-commit-timeout-in-seconds=30

# The maximum allowed capacity for each shard's transaction commit queue.
#shard-transaction-commit-queue-capacity=20000

# The maximum amount of time to wait for a shard to initialize from persistence on startup before
# failing an operation (eg transaction create and change listener registration).
#shard-initialization-timeout-in-seconds=300

# The minimum number of entries to be present in the in-memory journal log before a snapshot is to be taken.
#shard-snapshot-batch-count=20000

# The percentage of Runtime.totalMemory() used by the in-memory journal log before a snapshot is to be taken.
# Disabled, if direct threshold is enabled.
#shard-snapshot-data-threshold-percentage=12

# The max size of in-memory journal(in MB), after reaching the limit, snapshot will be taken. Should be not less then 1.
# If set to 0, direct threshold is disabled and percentage is used instead.
#shard-snapshot-data-threshold=0

# The interval at which the leader of the shard will check if its majority followers are active and
# term itself as isolated.
#shard-isolated-leader-check-interval-in-millis=5000

# The number of transaction modification operations (put, merge, delete) to batch before sending to the
# shard transaction actor. Batching improves performance as less modifications messages are sent to the
# actor and thus lessens the chance that the transaction actor's mailbox queue could get full.
#shard-batched-modification-count=1000

# The maximum amount of time for akka operations (remote or local) to complete before failing.
#operation-timeout-in-seconds=5

# Obsolete: this knob will be removed in a future release.
#
# The initial number of transactions per second that are allowed before the data store should begin
# applying back pressure. This number is only used as an initial guidance, subsequently the datastore
# measures the latency for a commit and auto-adjusts the rate limit.
#transaction-creation-initial-rate-limit=100

# A symbolic name for the RaftPolicy implementation to use. An instance with this name should
# be made available as a service. If this property is set to a name that cannot be resolved,
# then the normal RAFT behavior will be used. Symbolic names recognized out of the box are:
# - normal
# - disable-elections
# - two-node-cluster
#custom-raft-policy-implementation=

# When fragmenting messages thru the akka remoting framework, this is the maximum size in bytes
# for a message slice. This needs to be below Akka's maximum-frame-size and defaults to 480KiB.
maximum-message-slice-size=491520

# Tune the maximum number of entries a follower is allowed to lag behind the leader before it is
# considered out-of-sync. This flag may require tuning in face of a large number of small transactions.
#sync-index-threshold=10

# Record new transaction allocation stack trace, useful for debugging.  This makes the log include
# the stack trace of the creator of the Tx when there is an exception when the transaction is submitted 
# (e.g. for a failed validation).  Defaults to false due to performance impact.
#transaction-debug-context-enabled=true

# Multiplicator of shard-leader-election-timeout-in-seconds for the purposes of initial datastore
# convergence. Each frontend datastore instance will wait specified amount of time before becoming
# exposed as a service. A value of 0 indicates waiting forever. Defaults to 3.
#initial-settle-timeout-multiplier=3

#Interval after which a snapshot should be taken during the recovery process.
#recovery-snapshot-interval-seconds=0

# Option to take a snapshot when the entire DataTree root or top-level container is overwritten
snapshot-on-root-overwrite=false

# Enable lz4 compression for snapshots sent from leader to followers
#use-lz4-compression=true

# Export snapshot and journal content after recovery, possible modes: off, json
#
# Journal Json structure:
#       Entries : [
#            Entry : [
#                Node: [
#                   Path : {},
#                   ModificationType : {},
#                   Data : {}
#                ]
#            ]
#        ]
#
# Snapshot Json structure:
#       RootNode : {}
#
export-on-recovery=off

# Directory name for export files
#recovery-export-base-dir=persistence-export</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.824452" elapsed="0.000527"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.825598" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.825255" elapsed="0.000413"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.826085" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:25.825843" elapsed="0.000286"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:25.823823" elapsed="0.002404"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:25.822424" elapsed="0.003849"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.822345" elapsed="0.003988"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:25.826813" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:25.826493" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.826441" elapsed="0.000505"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:25.827292" elapsed="0.000050"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.827093" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.827046" elapsed="0.000402"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.828420" elapsed="0.000056"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:25.798800" elapsed="0.029898"/>
</kw>
<msg time="2026-04-25T23:42:25.828959" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:25.829005" level="INFO">${result} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:25.797918" elapsed="0.031110"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.829193" elapsed="0.000223"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:25.829601" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:42:25.829487" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:25.829467" elapsed="0.000215"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:25.829847" elapsed="0.000022"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:25.446230" elapsed="0.383738"/>
</kw>
<msg time="2026-04-25T23:42:25.830062" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.445450" elapsed="0.384662"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:25.443785" elapsed="0.386547"/>
</kw>
<msg time="2026-04-25T23:42:25.830412" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.443301" elapsed="0.387156"/>
</kw>
<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-25T23:42:25.833734" 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-25T23:42:25.834214" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.834522" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.830878" elapsed="0.003803"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:25.442253" elapsed="0.392692"/>
</kw>
<msg time="2026-04-25T23:42:25.835040" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.441807" elapsed="0.393281"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:25.441092" elapsed="0.394208"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:25.440935" elapsed="0.394446"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.837593" 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-25T23:42:25.837734" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:25.837457" elapsed="0.000306"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:25.839624" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.839353" elapsed="0.000298"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:25.839703" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:42:25.839872" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:25.839030" elapsed="0.000866"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.842723" level="INFO">${odl_connection} = 221</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:25.841977" elapsed="0.000789"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:25.845849" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:25.845929" 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-25T23:42:25.845553" elapsed="0.000400"/>
</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-25T23:42:25.846128" elapsed="0.000323"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:25.847322" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:26.137576" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:24 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:25.847007" elapsed="0.290737"/>
</kw>
<msg time="2026-04-25T23:42:26.137828" 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="PASS" start="2026-04-25T23:42:25.846623" elapsed="0.291290"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:25.845056" elapsed="0.292966"/>
</kw>
<msg time="2026-04-25T23:42:26.138148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.844329" elapsed="0.293895"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:25.843034" elapsed="0.295316"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:26.138451" elapsed="0.000050"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:25.841510" elapsed="0.297128"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.142067" level="INFO">Executing command 'cat //tmp/karaf-0.24.0-SNAPSHOT/etc/org.opendaylight.controller.cluster.datastore.cfg'.</msg>
<msg time="2026-04-25T23:42:26.154119" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:26.154885" level="INFO">${stdout} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<msg time="2026-04-25T23:42:26.155256" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:26.155583" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:26.141723" elapsed="0.014108"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.160108" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:26.159552" elapsed="0.000623"/>
</kw>
<msg time="2026-04-25T23:42:26.160495" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:26.160831" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.158190" elapsed="0.002792"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.163589" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:26.162417" elapsed="0.001407"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.166612" level="INFO"># This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# differently for each data store type by prefixing the data store type + '.'. For example, specifying
# the "shard-election-timeout-factor" property would be applied to both data stores whereas specifying
# "operational.shard-election-timeout-factor" would only apply to the "operational" data store. Similarly,
# specifying "config.shard-election-timeout-factor" would only apply to the "config" data store.
# Overall flexibility goes even further, as these overrides can also be combined with per-shard specification,
# so that you can also use:
#   &lt;shard-name&gt;.&lt;setting&gt;
#   &lt;datastore-name&gt;.&lt;shard-name&gt;.&lt;setting&gt;
# for example:
#   topology.shard-election-timeout-factor=2             # override both config/operational for topology shard
#   config.topology.shard-election-timeout-factor=5      # override config for topology shard
#   operational.topology.shard-election-timeout-factor=7 # override operational for topology shard
#

# The multiplication factor to be used to determine shard election timeout. The shard election timeout
# is determined by multiplying shardHeartbeatIntervalInMillis with the shardElectionTimeoutFactor.
shard-election-timeout-factor=20

# The interval at which a shard will send a heart beat message to its remote shard.
#shard-heartbeat-interval-in-millis=500

# The amount by which to divide election timeout in case of a candidate. This serves as a counter-balance
# to shard-election-timeout-factor. The default value is 1, i.e. election timeout is the same in all
# situations.
#shard-candidate-election-timeout-divisor=1

# The maximum amount of time to wait for a shard to elect a leader before failing an operation (eg transaction create).
#shard-leader-election-timeout-in-seconds=30

# Enable or disable data persistence.
#persistent=true

# Disable persistence for the operational data store by default.
operational.persistent=false

# The maximum amount of time a shard transaction can be idle without receiving any messages before it self-destructs.
#shard-transaction-idle-timeout-in-minutes=10

# The maximum amount of time a shard transaction three-phase commit can be idle without receiving the
# next messages before it aborts the transaction.
#shard-transaction-commit-timeout-in-seconds=30

# The maximum allowed capacity for each shard's transaction commit queue.
#shard-transaction-commit-queue-capacity=20000

# The maximum amount of time to wait for a shard to initialize from persistence on startup before
# failing an operation (eg transaction create and change listener registration).
#shard-initialization-timeout-in-seconds=300

# The minimum number of entries to be present in the in-memory journal log before a snapshot is to be taken.
#shard-snapshot-batch-count=20000

# The percentage of Runtime.totalMemory() used by the in-memory journal log before a snapshot is to be taken.
# Disabled, if direct threshold is enabled.
#shard-snapshot-data-threshold-percentage=12

# The max size of in-memory journal(in MB), after reaching the limit, snapshot will be taken. Should be not less then 1.
# If set to 0, direct threshold is disabled and percentage is used instead.
#shard-snapshot-data-threshold=0

# The interval at which the leader of the shard will check if its majority followers are active and
# term itself as isolated.
#shard-isolated-leader-check-interval-in-millis=5000

# The number of transaction modification operations (put, merge, delete) to batch before sending to the
# shard transaction actor. Batching improves performance as less modifications messages are sent to the
# actor and thus lessens the chance that the transaction actor's mailbox queue could get full.
#shard-batched-modification-count=1000

# The maximum amount of time for akka operations (remote or local) to complete before failing.
#operation-timeout-in-seconds=5

# Obsolete: this knob will be removed in a future release.
#
# The initial number of transactions per second that are allowed before the data store should begin
# applying back pressure. This number is only used as an initial guidance, subsequently the datastore
# measures the latency for a commit and auto-adjusts the rate limit.
#transaction-creation-initial-rate-limit=100

# A symbolic name for the RaftPolicy implementation to use. An instance with this name should
# be made available as a service. If this property is set to a name that cannot be resolved,
# then the normal RAFT behavior will be used. Symbolic names recognized out of the box are:
# - normal
# - disable-elections
# - two-node-cluster
#custom-raft-policy-implementation=

# When fragmenting messages thru the akka remoting framework, this is the maximum size in bytes
# for a message slice. This needs to be below Akka's maximum-frame-size and defaults to 480KiB.
maximum-message-slice-size=491520

# Tune the maximum number of entries a follower is allowed to lag behind the leader before it is
# considered out-of-sync. This flag may require tuning in face of a large number of small transactions.
#sync-index-threshold=10

# Record new transaction allocation stack trace, useful for debugging.  This makes the log include
# the stack trace of the creator of the Tx when there is an exception when the transaction is submitted 
# (e.g. for a failed validation).  Defaults to false due to performance impact.
#transaction-debug-context-enabled=true

# Multiplicator of shard-leader-election-timeout-in-seconds for the purposes of initial datastore
# convergence. Each frontend datastore instance will wait specified amount of time before becoming
# exposed as a service. A value of 0 indicates waiting forever. Defaults to 3.
#initial-settle-timeout-multiplier=3

#Interval after which a snapshot should be taken during the recovery process.
#recovery-snapshot-interval-seconds=0

# Option to take a snapshot when the entire DataTree root or top-level container is overwritten
snapshot-on-root-overwrite=false

# Enable lz4 compression for snapshots sent from leader to followers
#use-lz4-compression=true

# Export snapshot and journal content after recovery, possible modes: off, json
#
# Journal Json structure:
#       Entries : [
#            Entry : [
#                Node: [
#                   Path : {},
#                   ModificationType : {},
#                   Data : {}
#                ]
#            ]
#        ]
#
# Snapshot Json structure:
#       RootNode : {}
#
export-on-recovery=off

# Directory name for export files
#recovery-export-base-dir=persistence-export</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.166209" elapsed="0.000600"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.167476" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.167045" elapsed="0.000478"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.168042" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.167681" elapsed="0.000405"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:26.165493" elapsed="0.002689"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:26.164071" elapsed="0.004168"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.163986" elapsed="0.004332"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:26.168755" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:26.168506" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.168447" elapsed="0.000441"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:26.169276" elapsed="0.000055"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.169043" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.168993" elapsed="0.000464"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.170477" elapsed="0.000066"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:26.139797" elapsed="0.031004"/>
</kw>
<msg time="2026-04-25T23:42:26.171066" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:26.171118" level="INFO">${result} = # This file specifies property settings for the clustered data store to control its behavior. A
# property may be applied to every data store type ("config" and "operational") or can be customized
# d...</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.138906" elapsed="0.032238"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.171310" elapsed="0.000235"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:26.171843" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.171612" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.171594" elapsed="0.000348"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.172094" elapsed="0.000021"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:25.840804" elapsed="0.331410"/>
</kw>
<msg time="2026-04-25T23:42:26.172312" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.840054" elapsed="0.332309"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:25.838382" elapsed="0.334202"/>
</kw>
<msg time="2026-04-25T23:42:26.172673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.837920" elapsed="0.334825"/>
</kw>
<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-25T23:42:26.176208" elapsed="0.000371"/>
</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-25T23:42:26.176804" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.177139" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.173067" elapsed="0.004224"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:25.836838" elapsed="0.340648"/>
</kw>
<msg time="2026-04-25T23:42:26.177597" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:25.836373" elapsed="0.341285"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:25.835645" elapsed="0.342322"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:25.835485" elapsed="0.342534"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:25.064610" elapsed="1.113446"/>
</for>
<arg>cat ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:25.060293" elapsed="1.117862"/>
</kw>
<kw name="Clean_Directories_On_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.189790" level="INFO">${path_list} = ['tmp/', 'data/', 'cache/', 'snapshots/', 'journal/', 'segmented-journal/', 'etc/opendaylight/current/', 'etc/host.key']</msg>
<var>${path_list}</var>
<arg>"${directory_list}" == "${EMPTY}"</arg>
<arg>${ODL_DEFAULT_DATA_PATHS}</arg>
<arg>${directory_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:26.187308" elapsed="0.002511"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${tmp_dir}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Check_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-25T23:42:26.191592" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:26.191204" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.192126" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:26.191809" elapsed="0.000385"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:26.192242" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:42:26.192404" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:26.190820" elapsed="0.001609"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.195098" 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-25T23:42:26.195198" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.194953" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:26.197273" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.196807" elapsed="0.000494"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:26.197350" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:26.197503" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.196445" elapsed="0.001083"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.201949" level="INFO">${odl_connection} = 223</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.201259" elapsed="0.000737"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.204302" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:26.204381" 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-25T23:42:26.204005" 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-25T23:42:26.204583" elapsed="0.000364"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.205863" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:26.524487" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:25 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:26.205511" elapsed="0.319128"/>
</kw>
<msg time="2026-04-25T23:42:26.524779" 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="PASS" start="2026-04-25T23:42:26.205131" elapsed="0.319741"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:26.203489" elapsed="0.321498"/>
</kw>
<msg time="2026-04-25T23:42:26.525126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.203062" elapsed="0.322117"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:26.202482" elapsed="0.322862"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:26.525493" elapsed="0.000088"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:26.199958" elapsed="0.325849"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.528204" level="INFO">Executing command 'mkdir -p '/tmp' &amp;&amp; rm -vrf '/tmp/log' &amp;&amp; mv -vf '/tmp/karaf-0.24.0-SNAPSHOT/data/log' '/tmp/''.</msg>
<msg time="2026-04-25T23:42:26.541478" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:26.541827" level="INFO">${stdout} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<msg time="2026-04-25T23:42:26.541944" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:26.542040" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:26.528002" elapsed="0.014090"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.544507" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:26.543398" elapsed="0.001216"/>
</kw>
<msg time="2026-04-25T23:42:26.544873" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:26.544976" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.542504" elapsed="0.002523"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.546477" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:26.545419" elapsed="0.001117"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.549217" level="INFO">renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.548620" elapsed="0.000703"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.550333" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.549685" elapsed="0.000742"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.551068" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.550654" elapsed="0.000476"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:26.547683" elapsed="0.003521"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:26.546905" elapsed="0.004349"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.546677" elapsed="0.004615"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:26.551514" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:26.551372" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.551348" elapsed="0.000258"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:26.551832" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.551683" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.551657" elapsed="0.000292"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.552157" elapsed="0.000031"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:26.527397" elapsed="0.024993"/>
</kw>
<msg time="2026-04-25T23:42:26.552594" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:26.552788" level="INFO">${result} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.526171" elapsed="0.026703"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.553230" elapsed="0.000897"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:26.554688" elapsed="0.000123"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.554318" elapsed="0.000606"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.554289" elapsed="0.000691"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.555248" elapsed="0.000066"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:26.198272" elapsed="0.357319"/>
</kw>
<msg time="2026-04-25T23:42:26.555680" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.197692" elapsed="0.358080"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:26.195887" elapsed="0.360058"/>
</kw>
<msg time="2026-04-25T23:42:26.556005" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.195384" elapsed="0.360687"/>
</kw>
<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-25T23:42:26.560014" elapsed="0.000318"/>
</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-25T23:42:26.560505" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.560840" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.556491" elapsed="0.004502"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:26.194013" elapsed="0.367040"/>
</kw>
<msg time="2026-04-25T23:42:26.561112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.193509" elapsed="0.367654"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:26.192799" elapsed="0.368454"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:26.192623" elapsed="0.368678"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.563609" 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-25T23:42:26.563731" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.563473" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:26.565753" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.565258" elapsed="0.000524"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:26.565830" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:26.565986" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.564934" elapsed="0.001077"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.570066" level="INFO">${odl_connection} = 225</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.569446" elapsed="0.000667"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.572299" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:26.572377" 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-25T23:42:26.572030" elapsed="0.000370"/>
</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-25T23:42:26.572562" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.573801" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:26.880995" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:25 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:26.573453" elapsed="0.307783"/>
</kw>
<msg time="2026-04-25T23:42:26.881322" 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="PASS" start="2026-04-25T23:42:26.573085" elapsed="0.308325"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:26.571519" elapsed="0.310007"/>
</kw>
<msg time="2026-04-25T23:42:26.881581" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.571119" elapsed="0.310513"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:26.570581" elapsed="0.311232"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:26.881963" elapsed="0.000092"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:26.568445" elapsed="0.313809"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.884766" level="INFO">Executing command 'mkdir -p '/tmp' &amp;&amp; rm -vrf '/tmp/log' &amp;&amp; mv -vf '/tmp/karaf-0.24.0-SNAPSHOT/data/log' '/tmp/''.</msg>
<msg time="2026-04-25T23:42:26.897268" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:26.897525" level="INFO">${stdout} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<msg time="2026-04-25T23:42:26.897626" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:26.897764" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:26.884543" elapsed="0.013276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.900251" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:26.899144" elapsed="0.001211"/>
</kw>
<msg time="2026-04-25T23:42:26.900570" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:26.900674" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.898225" elapsed="0.002535"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.902152" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:26.901148" elapsed="0.001063"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.904405" level="INFO">renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.904055" elapsed="0.000416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.905049" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.904694" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.905648" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:26.905319" elapsed="0.000412"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:26.903302" elapsed="0.002505"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:26.902394" elapsed="0.003464"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.902345" elapsed="0.003551"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:26.906119" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:26.905977" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.905953" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:26.906406" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.906282" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.906261" elapsed="0.000260"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.906759" elapsed="0.000032"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:26.883951" elapsed="0.023034"/>
</kw>
<msg time="2026-04-25T23:42:26.907184" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:26.907383" level="INFO">${result} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:26.882668" elapsed="0.024805"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.907895" elapsed="0.000683"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:26.909221" elapsed="0.000112"/>
</return>
<status status="PASS" start="2026-04-25T23:42:26.908858" elapsed="0.000591"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.908822" elapsed="0.000683"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:26.909795" elapsed="0.000071"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:26.566769" elapsed="0.343375"/>
</kw>
<msg time="2026-04-25T23:42:26.910281" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.566173" elapsed="0.344186"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:26.564385" elapsed="0.346118"/>
</kw>
<msg time="2026-04-25T23:42:26.910576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.563920" elapsed="0.346722"/>
</kw>
<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-25T23:42:26.914430" 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-25T23:42:26.914975" elapsed="0.000160"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.915285" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.911095" elapsed="0.004340"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:26.562847" elapsed="0.352647"/>
</kw>
<msg time="2026-04-25T23:42:26.915578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.562380" elapsed="0.353256"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:26.561572" elapsed="0.354176"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:26.561407" elapsed="0.354394"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.918006" 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-25T23:42:26.918105" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:26.917869" elapsed="0.000262"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:26.920110" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.919602" elapsed="0.000535"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:26.920185" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:26.920339" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:26.919281" elapsed="0.001082"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.924454" level="INFO">${odl_connection} = 227</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:26.923825" elapsed="0.000676"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:26.926702" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:26.926797" 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-25T23:42:26.926427" elapsed="0.000394"/>
</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-25T23:42:26.926982" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:26.928221" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:27.251944" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:26 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:26.927858" elapsed="0.324241"/>
</kw>
<msg time="2026-04-25T23:42:27.252185" 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="PASS" start="2026-04-25T23:42:26.927480" elapsed="0.324800"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:26.925941" elapsed="0.326456"/>
</kw>
<msg time="2026-04-25T23:42:27.252451" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.925495" elapsed="0.327008"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:26.924972" elapsed="0.327689"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:27.252840" elapsed="0.000098"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:26.922602" elapsed="0.330537"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.255600" level="INFO">Executing command 'mkdir -p '/tmp' &amp;&amp; rm -vrf '/tmp/log' &amp;&amp; mv -vf '/tmp/karaf-0.24.0-SNAPSHOT/data/log' '/tmp/''.</msg>
<msg time="2026-04-25T23:42:27.268194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:27.268357" level="INFO">${stdout} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<msg time="2026-04-25T23:42:27.268420" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:27.268480" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.255380" elapsed="0.013134"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.270920" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:27.269760" elapsed="0.001264"/>
</kw>
<msg time="2026-04-25T23:42:27.271237" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:27.271338" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:27.268959" elapsed="0.002431"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.273084" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:27.271806" elapsed="0.001338"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.275638" level="INFO">renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:27.275078" elapsed="0.000699"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.276731" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:27.276125" elapsed="0.000650"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.277170" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:27.276930" elapsed="0.000284"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:27.274134" elapsed="0.003132"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:27.273330" elapsed="0.003971"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:27.273282" elapsed="0.004047"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:27.277488" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:27.277387" elapsed="0.000145"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:27.277370" elapsed="0.000184"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:27.277716" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:42:27.277605" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:27.277590" elapsed="0.000219"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:27.277959" elapsed="0.000022"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:27.254790" elapsed="0.023330"/>
</kw>
<msg time="2026-04-25T23:42:27.278268" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:27.278380" level="INFO">${result} = renamed '/tmp/karaf-0.24.0-SNAPSHOT/data/log' -&gt; '/tmp/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:27.253513" elapsed="0.024925"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:27.278775" elapsed="0.000486"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:27.279630" elapsed="0.000102"/>
</return>
<status status="PASS" start="2026-04-25T23:42:27.279396" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:27.279376" elapsed="0.000479"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:27.280042" elapsed="0.000047"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:26.921081" elapsed="0.359211"/>
</kw>
<msg time="2026-04-25T23:42:27.280354" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.920522" elapsed="0.359906"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:26.918762" elapsed="0.361759"/>
</kw>
<msg time="2026-04-25T23:42:27.280565" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.918285" elapsed="0.362325"/>
</kw>
<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-25T23:42:27.283723" 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-25T23:42:27.284201" elapsed="0.000157"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:27.284509" elapsed="0.000152"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:27.280935" elapsed="0.003821"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:26.917236" elapsed="0.367579"/>
</kw>
<msg time="2026-04-25T23:42:27.284871" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:26.916784" elapsed="0.368138"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:26.916065" elapsed="0.368940"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:26.915905" elapsed="0.369146"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:26.192486" elapsed="1.092603"/>
</for>
<arg>mkdir -p '${tmp_dir}' &amp;&amp; rm -vrf '${tmp_dir}/log' &amp;&amp; mv -vf '${karaf_home}/data/log' '${tmp_dir}/'</arg>
<arg>${member_index_list}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:26.190189" elapsed="1.094962"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:26.189902" elapsed="1.095286"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:26.189880" elapsed="1.095334"/>
</if>
<kw name="Safe_With_Ssh_To_List_Or_All_Run_Keyword" owner="ClusterManagement">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.286572" 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-25T23:42:27.286677" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:27.286436" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="With_Ssh_To_List_Or_All_Run_Keyword" owner="ClusterManagement">
<kw name="Comment" owner="BuiltIn">
<arg>This keyword is experimental and there is high risk of being replaced by another approach.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-25T23:42:27.287857" elapsed="0.000212"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.289103" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:27.288669" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.289600" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:27.289291" elapsed="0.000373"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:27.289729" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:42:27.289889" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:27.288286" elapsed="0.001628"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:27.290899" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:27.290607" elapsed="0.000318"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:27.290974" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:42:27.291132" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:27.290282" elapsed="0.000875"/>
</kw>
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.294461" level="INFO">${odl_connection} = 229</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:27.294088" elapsed="0.000401"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:27.296983" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:27.297251" 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-25T23:42:27.296419" elapsed="0.000946"/>
</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-25T23:42:27.297669" elapsed="0.000638"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.299598" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:27.611797" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:26 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:27.299275" elapsed="0.312682"/>
</kw>
<msg time="2026-04-25T23:42:27.612108" 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="PASS" start="2026-04-25T23:42:27.298613" elapsed="0.313610"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:27.295466" elapsed="0.316925"/>
</kw>
<msg time="2026-04-25T23:42:27.612482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:27.295074" elapsed="0.317459"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:27.294673" elapsed="0.317937"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:27.612664" elapsed="0.000072"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:27.293719" elapsed="0.319154"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="ClusterManagement__Clean_Directories" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.614911" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/tmp/'.</msg>
<msg time="2026-04-25T23:42:27.627474" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.614492" elapsed="0.013139"/>
</kw>
<var name="${relative_path}">tmp/</var>
<status status="PASS" start="2026-04-25T23:42:27.614305" elapsed="0.013410"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.629275" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/data/'.</msg>
<msg time="2026-04-25T23:42:27.721711" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.628115" elapsed="0.093849"/>
</kw>
<var name="${relative_path}">data/</var>
<status status="PASS" start="2026-04-25T23:42:27.627847" elapsed="0.094201"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.723623" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/cache/'.</msg>
<msg time="2026-04-25T23:42:27.775264" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.722583" elapsed="0.052998"/>
</kw>
<var name="${relative_path}">cache/</var>
<status status="PASS" start="2026-04-25T23:42:27.722246" elapsed="0.053606"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.777562" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/snapshots/'.</msg>
<msg time="2026-04-25T23:42:27.822860" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.776512" elapsed="0.046590"/>
</kw>
<var name="${relative_path}">snapshots/</var>
<status status="PASS" start="2026-04-25T23:42:27.776130" elapsed="0.047056"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.824616" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/journal/'.</msg>
<msg time="2026-04-25T23:42:27.871010" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.823753" elapsed="0.047515"/>
</kw>
<var name="${relative_path}">journal/</var>
<status status="PASS" start="2026-04-25T23:42:27.823385" elapsed="0.047971"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.872939" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/segmented-journal/'.</msg>
<msg time="2026-04-25T23:42:27.918748" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.871956" elapsed="0.047046"/>
</kw>
<var name="${relative_path}">segmented-journal/</var>
<status status="PASS" start="2026-04-25T23:42:27.871569" elapsed="0.047521"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.920558" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/opendaylight/current/'.</msg>
<msg time="2026-04-25T23:42:27.967190" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.919632" elapsed="0.047909"/>
</kw>
<var name="${relative_path}">etc/opendaylight/current/</var>
<status status="PASS" start="2026-04-25T23:42:27.919300" elapsed="0.048350"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:27.969307" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/host.key'.</msg>
<msg time="2026-04-25T23:42:28.015123" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:27.968346" elapsed="0.047020"/>
</kw>
<var name="${relative_path}">etc/host.key</var>
<status status="PASS" start="2026-04-25T23:42:27.967963" elapsed="0.047487"/>
</iter>
<var>${relative_path}</var>
<value>@{relative_path_list}</value>
<status status="PASS" start="2026-04-25T23:42:27.614156" elapsed="0.401363"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>For each relative path, remove files with respect to /tmp/karaf-0.24.0-SNAPSHOT. Return None.</doc>
<status status="PASS" start="2026-04-25T23:42:27.613836" elapsed="0.401838"/>
</kw>
<msg time="2026-04-25T23:42:28.015953" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:28.016055" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:27.613117" elapsed="0.402989"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:28.016478" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:28.017506" elapsed="0.000075"/>
</return>
<status status="PASS" start="2026-04-25T23:42:28.017204" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:28.017156" elapsed="0.000607"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:28.018107" elapsed="0.000050"/>
</kw>
<arg>${member_ip}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:27.291419" elapsed="0.726963"/>
</kw>
<var name="${member_index}">1</var>
<status status="PASS" start="2026-04-25T23:42:27.290112" elapsed="0.728365"/>
</iter>
<iter>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:28.020588" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:28.019964" elapsed="0.000683"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:28.020798" elapsed="0.000065"/>
</return>
<msg time="2026-04-25T23:42:28.021169" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:28.019162" elapsed="0.002063"/>
</kw>
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.024932" level="INFO">${odl_connection} = 230</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:28.023992" elapsed="0.001000"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:28.027954" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:28.028219" 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-25T23:42:28.027389" elapsed="0.000928"/>
</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-25T23:42:28.028609" elapsed="0.000626"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.030549" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:28.350611" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:26 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:28.030218" elapsed="0.320688"/>
</kw>
<msg time="2026-04-25T23:42:28.351068" 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="PASS" start="2026-04-25T23:42:28.029555" elapsed="0.321628"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:28.026456" elapsed="0.324904"/>
</kw>
<msg time="2026-04-25T23:42:28.351453" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:28.026007" elapsed="0.325498"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:28.025450" elapsed="0.326133"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:28.351638" elapsed="0.000047"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:28.023137" elapsed="0.328706"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="ClusterManagement__Clean_Directories" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.353876" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/tmp/'.</msg>
<msg time="2026-04-25T23:42:28.366901" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.353455" elapsed="0.013713"/>
</kw>
<var name="${relative_path}">tmp/</var>
<status status="PASS" start="2026-04-25T23:42:28.353303" elapsed="0.013957"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.368801" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/data/'.</msg>
<msg time="2026-04-25T23:42:28.466994" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.367900" elapsed="0.099409"/>
</kw>
<var name="${relative_path}">data/</var>
<status status="PASS" start="2026-04-25T23:42:28.367513" elapsed="0.099899"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.469152" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/cache/'.</msg>
<msg time="2026-04-25T23:42:28.515341" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.468145" elapsed="0.047440"/>
</kw>
<var name="${relative_path}">cache/</var>
<status status="PASS" start="2026-04-25T23:42:28.467737" elapsed="0.047937"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.517209" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/snapshots/'.</msg>
<msg time="2026-04-25T23:42:28.563412" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.516284" elapsed="0.047465"/>
</kw>
<var name="${relative_path}">snapshots/</var>
<status status="PASS" start="2026-04-25T23:42:28.515953" elapsed="0.047896"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.565675" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/journal/'.</msg>
<msg time="2026-04-25T23:42:28.611453" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.564685" elapsed="0.047083"/>
</kw>
<var name="${relative_path}">journal/</var>
<status status="PASS" start="2026-04-25T23:42:28.564291" elapsed="0.047580"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.613444" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/segmented-journal/'.</msg>
<msg time="2026-04-25T23:42:28.659326" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.612499" elapsed="0.047080"/>
</kw>
<var name="${relative_path}">segmented-journal/</var>
<status status="PASS" start="2026-04-25T23:42:28.612124" elapsed="0.047540"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.661298" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/opendaylight/current/'.</msg>
<msg time="2026-04-25T23:42:28.707377" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.660338" elapsed="0.047287"/>
</kw>
<var name="${relative_path}">etc/opendaylight/current/</var>
<status status="PASS" start="2026-04-25T23:42:28.659921" elapsed="0.047841"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.709183" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/host.key'.</msg>
<msg time="2026-04-25T23:42:28.755275" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:28.708288" elapsed="0.047240"/>
</kw>
<var name="${relative_path}">etc/host.key</var>
<status status="PASS" start="2026-04-25T23:42:28.707964" elapsed="0.047649"/>
</iter>
<var>${relative_path}</var>
<value>@{relative_path_list}</value>
<status status="PASS" start="2026-04-25T23:42:28.353152" elapsed="0.402580"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>For each relative path, remove files with respect to /tmp/karaf-0.24.0-SNAPSHOT. Return None.</doc>
<status status="PASS" start="2026-04-25T23:42:28.352821" elapsed="0.403076"/>
</kw>
<msg time="2026-04-25T23:42:28.756138" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:28.756237" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:28.352096" elapsed="0.404193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:28.756685" elapsed="0.000539"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:28.757741" elapsed="0.000079"/>
</return>
<status status="PASS" start="2026-04-25T23:42:28.757400" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:28.757350" elapsed="0.000736"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:28.758437" elapsed="0.000049"/>
</kw>
<arg>${member_ip}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:28.021850" elapsed="0.736895"/>
</kw>
<var name="${member_index}">2</var>
<status status="PASS" start="2026-04-25T23:42:28.018694" elapsed="0.740153"/>
</iter>
<iter>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:28.761008" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:28.760335" elapsed="0.000733"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:28.761177" elapsed="0.000065"/>
</return>
<msg time="2026-04-25T23:42:28.761517" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:28.759534" elapsed="0.002038"/>
</kw>
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.764458" level="INFO">${odl_connection} = 231</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:28.764058" elapsed="0.000427"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:28.767328" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:28.767594" 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-25T23:42:28.766488" elapsed="0.001224"/>
</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-25T23:42:28.768016" elapsed="0.000606"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:28.769933" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:29.085351" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:27 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:28.769590" elapsed="0.315925"/>
</kw>
<msg time="2026-04-25T23:42:29.085676" 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="PASS" start="2026-04-25T23:42:28.768947" elapsed="0.316870"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:28.765534" elapsed="0.320454"/>
</kw>
<msg time="2026-04-25T23:42:29.086078" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:28.765091" elapsed="0.321039"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:28.764676" elapsed="0.321533"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:29.086264" elapsed="0.000046"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:28.763565" elapsed="0.322877"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="ClusterManagement__Clean_Directories" owner="ClusterManagement">
<for flavor="IN">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.088454" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/tmp/'.</msg>
<msg time="2026-04-25T23:42:29.101803" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.088056" elapsed="0.013996"/>
</kw>
<var name="${relative_path}">tmp/</var>
<status status="PASS" start="2026-04-25T23:42:29.087909" elapsed="0.014228"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.103752" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/data/'.</msg>
<msg time="2026-04-25T23:42:29.193760" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.102657" elapsed="0.091487"/>
</kw>
<var name="${relative_path}">data/</var>
<status status="PASS" start="2026-04-25T23:42:29.102336" elapsed="0.091921"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.196232" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/cache/'.</msg>
<msg time="2026-04-25T23:42:29.252206" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.195070" elapsed="0.057469"/>
</kw>
<var name="${relative_path}">cache/</var>
<status status="PASS" start="2026-04-25T23:42:29.194560" elapsed="0.058094"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.254673" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/snapshots/'.</msg>
<msg time="2026-04-25T23:42:29.303839" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.253652" elapsed="0.050480"/>
</kw>
<var name="${relative_path}">snapshots/</var>
<status status="PASS" start="2026-04-25T23:42:29.253243" elapsed="0.050988"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.305995" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/journal/'.</msg>
<msg time="2026-04-25T23:42:29.356214" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.304914" elapsed="0.051659"/>
</kw>
<var name="${relative_path}">journal/</var>
<status status="PASS" start="2026-04-25T23:42:29.304482" elapsed="0.052273"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.358401" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/segmented-journal/'.</msg>
<msg time="2026-04-25T23:42:29.411890" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.357440" elapsed="0.054714"/>
</kw>
<var name="${relative_path}">segmented-journal/</var>
<status status="PASS" start="2026-04-25T23:42:29.357042" elapsed="0.055204"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.413846" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/opendaylight/current/'.</msg>
<msg time="2026-04-25T23:42:29.460283" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.412879" elapsed="0.047706"/>
</kw>
<var name="${relative_path}">etc/opendaylight/current/</var>
<status status="PASS" start="2026-04-25T23:42:29.412476" elapsed="0.048257"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.462407" level="INFO">Executing command 'rm -rf /tmp/karaf-0.24.0-SNAPSHOT/etc/host.key'.</msg>
<msg time="2026-04-25T23:42:29.508073" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ${karaf_home}${/}${relative_path}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.461420" elapsed="0.047009"/>
</kw>
<var name="${relative_path}">etc/host.key</var>
<status status="PASS" start="2026-04-25T23:42:29.461018" elapsed="0.047534"/>
</iter>
<var>${relative_path}</var>
<value>@{relative_path_list}</value>
<status status="PASS" start="2026-04-25T23:42:29.087755" elapsed="0.420891"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>For each relative path, remove files with respect to /tmp/karaf-0.24.0-SNAPSHOT. Return None.</doc>
<status status="PASS" start="2026-04-25T23:42:29.087407" elapsed="0.421467"/>
</kw>
<msg time="2026-04-25T23:42:29.509178" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:29.509281" level="INFO">${result} = None</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:29.086690" elapsed="0.422645"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.509874" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:29.511005" elapsed="0.000078"/>
</return>
<status status="PASS" start="2026-04-25T23:42:29.510645" elapsed="0.000516"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.510591" elapsed="0.000628"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:29.511629" elapsed="0.000054"/>
</kw>
<arg>${member_ip}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:28.762206" elapsed="0.749748"/>
</kw>
<var name="${member_index}">3</var>
<status status="PASS" start="2026-04-25T23:42:28.759096" elapsed="0.752957"/>
</iter>
<var>${member_index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:27.289969" elapsed="2.222154"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>For each index in given list (or all): activate SSH connection, run given Keyword, close active connection. Return None.
Beware that in order to avoid "got positional argument after named arguments", first two arguments in the call should not be named.</doc>
<status status="PASS" start="2026-04-25T23:42:27.287382" elapsed="2.224864"/>
</kw>
<msg time="2026-04-25T23:42:29.512342" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:27.286877" elapsed="2.225579"/>
</kw>
<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-25T23:42:29.519039" elapsed="0.000524"/>
</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-25T23:42:29.519888" elapsed="0.000239"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.520340" elapsed="0.000136"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:29.513246" elapsed="0.007303"/>
</kw>
<arg>With_Ssh_To_List_Or_All_Run_Keyword</arg>
<arg>${member_index_list}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:27.285955" elapsed="2.234676"/>
</kw>
<arg>${member_index_list}</arg>
<arg>ClusterManagement__Clean_Directories</arg>
<arg>${path_list}</arg>
<arg>${karaf_home}</arg>
<doc>Remember active ssh connection index, call With_Ssh_To_List_Or_All_Run_Keyword, return None. Restore the conection index on teardown.</doc>
<status status="PASS" start="2026-04-25T23:42:27.285388" elapsed="2.235360"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${tmp_dir}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Check_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-25T23:42:29.523364" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:29.522816" elapsed="0.000585"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.524153" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:29.523627" elapsed="0.000564"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:29.524253" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T23:42:29.524474" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:29.522257" elapsed="0.002252"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.526932" 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-25T23:42:29.527034" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.526791" elapsed="0.000269"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:29.529052" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:29.528577" elapsed="0.000503"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:29.529134" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:29.529289" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:29.528253" elapsed="0.001062"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.533276" level="INFO">${odl_connection} = 233</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:29.532641" elapsed="0.000681"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.535721" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:29.535803" 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-25T23:42:29.535411" elapsed="0.000416"/>
</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-25T23:42:29.535992" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.537273" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:29.855720" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:27 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:29.536942" elapsed="0.318995"/>
</kw>
<msg time="2026-04-25T23:42:29.856035" 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="PASS" start="2026-04-25T23:42:29.536546" elapsed="0.319596"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:29.534917" elapsed="0.321351"/>
</kw>
<msg time="2026-04-25T23:42:29.856370" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.534495" elapsed="0.321929"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:29.533972" elapsed="0.322636"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:29.856782" elapsed="0.000096"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.37 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:29.531556" elapsed="0.325540"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.859710" level="INFO">Executing command 'mkdir -p '/tmp/karaf-0.24.0-SNAPSHOT/data' &amp;&amp; rm -vrf '/tmp/karaf-0.24.0-SNAPSHOT/log' &amp;&amp; mv -vf '/tmp/log' '/tmp/karaf-0.24.0-SNAPSHOT/data/''.</msg>
<msg time="2026-04-25T23:42:29.872498" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:29.872670" level="INFO">${stdout} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<msg time="2026-04-25T23:42:29.872793" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:29.872852" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:29.859458" elapsed="0.013426"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.874321" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:29.873652" elapsed="0.000770"/>
</kw>
<msg time="2026-04-25T23:42:29.874632" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:29.874765" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:29.873137" elapsed="0.001681"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.876207" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:29.875198" elapsed="0.001068"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.879223" level="INFO">renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:29.878224" elapsed="0.001105"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.880267" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:29.879688" elapsed="0.000673"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.881402" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:29.880748" elapsed="0.000755"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:29.877297" elapsed="0.004328"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:29.876457" elapsed="0.005264"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.876409" elapsed="0.005340"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:29.881911" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:29.881808" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.881791" elapsed="0.000186"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:29.882116" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-25T23:42:29.882028" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.882013" elapsed="0.000193"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:29.882358" elapsed="0.000022"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:29.858865" elapsed="0.023654"/>
</kw>
<msg time="2026-04-25T23:42:29.882663" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:29.882799" level="INFO">${result} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:29.857485" elapsed="0.025373"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.883111" elapsed="0.000493"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:29.883987" elapsed="0.000077"/>
</return>
<status status="PASS" start="2026-04-25T23:42:29.883763" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.883743" elapsed="0.000441"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:29.884370" elapsed="0.000047"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:29.530030" elapsed="0.354599"/>
</kw>
<msg time="2026-04-25T23:42:29.884706" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.529475" elapsed="0.355283"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:29.527685" elapsed="0.357161"/>
</kw>
<msg time="2026-04-25T23:42:29.884888" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.527217" elapsed="0.357715"/>
</kw>
<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-25T23:42:29.888071" elapsed="0.000361"/>
</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-25T23:42:29.888601" elapsed="0.000214"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.888968" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:29.885252" elapsed="0.003893"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:29.526152" elapsed="0.363055"/>
</kw>
<msg time="2026-04-25T23:42:29.889265" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.525681" elapsed="0.363634"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:29.524978" elapsed="0.364424"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:29.524820" elapsed="0.364629"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.891717" 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-25T23:42:29.891819" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:29.891557" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:29.893860" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:29.893384" elapsed="0.000502"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:29.893934" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:42:29.894085" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:29.893044" elapsed="0.001065"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.897978" level="INFO">${odl_connection} = 235</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:29.897314" elapsed="0.000711"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:29.900390" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:29.900467" 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-25T23:42:29.900123" 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-25T23:42:29.900651" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:29.901910" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:30.228503" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:28 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:29.901552" elapsed="0.327104"/>
</kw>
<msg time="2026-04-25T23:42:30.228785" 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="PASS" start="2026-04-25T23:42:29.901161" elapsed="0.327715"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:29.899613" elapsed="0.329380"/>
</kw>
<msg time="2026-04-25T23:42:30.229124" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.899211" elapsed="0.329966"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:29.898472" elapsed="0.330869"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:30.229488" elapsed="0.000091"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.171.80 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:29.896288" elapsed="0.333532"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.232238" level="INFO">Executing command 'mkdir -p '/tmp/karaf-0.24.0-SNAPSHOT/data' &amp;&amp; rm -vrf '/tmp/karaf-0.24.0-SNAPSHOT/log' &amp;&amp; mv -vf '/tmp/log' '/tmp/karaf-0.24.0-SNAPSHOT/data/''.</msg>
<msg time="2026-04-25T23:42:30.245166" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:30.245417" level="INFO">${stdout} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<msg time="2026-04-25T23:42:30.245517" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:30.245608" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:30.232035" elapsed="0.013625"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.247548" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:30.246947" elapsed="0.000700"/>
</kw>
<msg time="2026-04-25T23:42:30.247892" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:30.247991" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:30.246144" elapsed="0.001898"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.249413" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.248413" elapsed="0.001060"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.252068" level="INFO">renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.251462" elapsed="0.000711"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.253493" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.252515" elapsed="0.001075"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.254585" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.253975" elapsed="0.000762"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:30.250505" elapsed="0.004309"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:30.249653" elapsed="0.005197"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.249607" elapsed="0.005270"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:30.255037" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:30.254935" elapsed="0.000146"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.254917" elapsed="0.000186"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:30.255243" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:42:30.255154" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.255139" elapsed="0.000187"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:30.255474" elapsed="0.000022"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:30.231426" elapsed="0.024211"/>
</kw>
<msg time="2026-04-25T23:42:30.255805" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:30.255916" level="INFO">${result} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:30.230191" elapsed="0.025787"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.256235" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:30.257109" elapsed="0.000068"/>
</return>
<status status="PASS" start="2026-04-25T23:42:30.256882" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.256863" elapsed="0.000433"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:30.257484" elapsed="0.000046"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:29.894809" elapsed="0.362939"/>
</kw>
<msg time="2026-04-25T23:42:30.257809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.894267" elapsed="0.363592"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:29.892462" elapsed="0.365520"/>
</kw>
<msg time="2026-04-25T23:42:30.258024" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.892001" elapsed="0.366068"/>
</kw>
<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-25T23:42:30.261212" 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-25T23:42:30.261706" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.262017" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:30.258401" elapsed="0.003764"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:29.890933" elapsed="0.371289"/>
</kw>
<msg time="2026-04-25T23:42:30.262277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:29.890456" elapsed="0.371871"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:29.889749" elapsed="0.372717"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:29.889555" elapsed="0.372958"/>
</iter>
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.264793" 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-25T23:42:30.264894" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.264639" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Check_Unsafely_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:30.266919" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:30.266416" elapsed="0.000530"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:42:30.266993" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:42:30.267145" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:30.266073" elapsed="0.001096"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.270971" level="INFO">${odl_connection} = 237</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:42:30.270328" elapsed="0.000689"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.273356" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:30.273434" 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-25T23:42:30.273090" 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-25T23:42:30.273619" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.274880" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:30.589054" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:29 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:30.274498" elapsed="0.314808"/>
</kw>
<msg time="2026-04-25T23:42:30.589391" 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="PASS" start="2026-04-25T23:42:30.274134" elapsed="0.315349"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:42:30.272573" elapsed="0.317025"/>
</kw>
<msg time="2026-04-25T23:42:30.589652" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:30.272176" elapsed="0.317559"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:30.271455" elapsed="0.318447"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-04-25T23:42:30.590049" elapsed="0.000093"/>
</return>
<arg>${ip_address}</arg>
<doc>Open a connection to the ODL system at 10.30.170.188 and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:42:30.269327" elapsed="0.321010"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.592855" level="INFO">Executing command 'mkdir -p '/tmp/karaf-0.24.0-SNAPSHOT/data' &amp;&amp; rm -vrf '/tmp/karaf-0.24.0-SNAPSHOT/log' &amp;&amp; mv -vf '/tmp/log' '/tmp/karaf-0.24.0-SNAPSHOT/data/''.</msg>
<msg time="2026-04-25T23:42:30.605549" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:30.605735" level="INFO">${stdout} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<msg time="2026-04-25T23:42:30.605800" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:42:30.605856" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:42:30.592630" elapsed="0.013258"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.607058" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:42:30.606649" elapsed="0.000472"/>
</kw>
<msg time="2026-04-25T23:42:30.607250" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:42:30.607312" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:30.606159" elapsed="0.001191"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.608235" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.607586" elapsed="0.000685"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.609844" level="INFO">renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.609467" elapsed="0.000442"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.610788" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.610131" elapsed="0.000717"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.611407" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.611066" elapsed="0.000401"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:42:30.608896" elapsed="0.002646"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:30.608387" elapsed="0.003206"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.608357" elapsed="0.003274"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:42:30.611888" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:30.611736" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.611710" elapsed="0.000272"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:30.612181" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-25T23:42:30.612055" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.612034" elapsed="0.000265"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:30.612507" elapsed="0.000031"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:42:30.592043" elapsed="0.020724"/>
</kw>
<msg time="2026-04-25T23:42:30.612966" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:42:30.613118" level="INFO">${result} = renamed '/tmp/log' -&gt; '/tmp/karaf-0.24.0-SNAPSHOT/data/log'</msg>
<var>${status}</var>
<var>${result}</var>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:42:30.590736" elapsed="0.022462"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.613546" elapsed="0.000731"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; == &quot;PASS&quot;">
<return>
<value>${result}</value>
<status status="PASS" start="2026-04-25T23:42:30.614809" elapsed="0.000099"/>
</return>
<status status="PASS" start="2026-04-25T23:42:30.614465" elapsed="0.000611"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.614437" elapsed="0.000695"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>${result}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:30.615400" elapsed="0.000064"/>
</kw>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="PASS" start="2026-04-25T23:42:30.267871" elapsed="0.347898"/>
</kw>
<msg time="2026-04-25T23:42:30.615930" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Unsafely_Keyword_Over_Temporary_Odl_Session</arg>
<arg>${member_ip}</arg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:30.267326" elapsed="0.348679"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Obtain Ip address, open session, call SSHKeywords.Execute_Command_Passes, close session and return output. This affects which SSH session is active.</doc>
<status status="PASS" start="2026-04-25T23:42:30.265533" elapsed="0.350593"/>
</kw>
<msg time="2026-04-25T23:42:30.616185" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:30.265075" elapsed="0.351172"/>
</kw>
<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-25T23:42:30.620152" 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-25T23:42:30.620635" elapsed="0.000179"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.620965" elapsed="0.000095"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:30.616667" elapsed="0.004445"/>
</kw>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:30.264026" elapsed="0.357142"/>
</kw>
<msg time="2026-04-25T23:42:30.621225" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Check_Unsafely_Bash_Command_On_Member</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:30.263562" elapsed="0.357712"/>
</kw>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="PASS" start="2026-04-25T23:42:30.262859" elapsed="0.358499"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:30.262615" elapsed="0.358789"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:29.524594" elapsed="1.096848"/>
</for>
<arg>mkdir -p '${karaf_home}/data' &amp;&amp; rm -vrf '${karaf_home}/log' &amp;&amp; mv -vf '${tmp_dir}/log' '${karaf_home}/data/'</arg>
<arg>${member_index_list}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-25T23:42:29.521370" elapsed="1.100134"/>
</kw>
<status status="PASS" start="2026-04-25T23:42:29.520857" elapsed="1.100685"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:29.520830" elapsed="1.100738"/>
</if>
<arg>tmp_dir=/tmp</arg>
<doc>Clear @{directory_list} or ['tmp/', 'data/', 'cache/', 'snapshots/', 'journal/', 'segmented-journal/', 'etc/opendaylight/current/', 'etc/host.key'] for members in given list or all. Return None.
If ${tmp_dir} is nonempty, use that location to preserve data/log/.
This is intended to return Karaf (offline) to the state it was upon the first boot.</doc>
<status status="PASS" start="2026-04-25T23:42:26.182692" elapsed="4.438926"/>
</kw>
<doc>Un-comment the flag usage in config file. Also clean most data except data/log/.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:42:21.711077" elapsed="8.910704"/>
</test>
<test id="s1-s1-t3" name="Start_All_And_Sync" line="40">
<kw name="Start_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.635577" level="INFO">${base_command} = /tmp/karaf-0.24.0-SNAPSHOT/bin/start</msg>
<var>${base_command}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/bin/start</arg>
<arg>${NODE_START_COMMAND}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.635193" elapsed="0.000412"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.636162" level="INFO">${command} = /tmp/karaf-0.24.0-SNAPSHOT/bin/start</msg>
<var>${command}</var>
<arg>"""${export_java_home}""" != ""</arg>
<arg>export JAVA_HOME="${export_java_home}"; ${base_command}</arg>
<arg>${base_command}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.635799" elapsed="0.000390"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:42:30.636630" level="INFO">${epoch} = 1777160550.636554</msg>
<var>${epoch}</var>
<arg>time_zone=UTC</arg>
<arg>result_format=epoch</arg>
<arg>exclude_millis=False</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:42:30.636358" elapsed="0.000298"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.637245" level="INFO">${gc_filepath} = /tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log</msg>
<var>${gc_filepath}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/data/log/gc_${epoch}.log</arg>
<arg>${GC_LOG_PATH}/gc_${epoch}.log</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.636842" elapsed="0.000430"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.637831" level="INFO">${gc_options} = -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log</msg>
<var>${gc_options}</var>
<arg>"docker" not in """${node_start_command}"""</arg>
<arg>-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${gc_filepath}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.637440" elapsed="0.000418"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.639562" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:30.639084" elapsed="0.000509"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.640169" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:30.639811" elapsed="0.000389"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:30.640256" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:42:30.640440" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:30.638648" elapsed="0.001821"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:30.641713" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:30.641421" elapsed="0.000320"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.642524" 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-25T23:42:30.642623" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.642382" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:30.645664" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:30.645367" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.645346" elapsed="0.000420"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.646055" 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-25T23:42:30.646157" 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-25T23:42:30.645924" elapsed="0.000259"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.646842" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log" on remote system "10.30.171.37" 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-25T23:42:30.646340" elapsed="0.000552"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.647483" level="INFO">${conn_id} = 239</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-25T23:42:30.647066" elapsed="0.000443"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.648756" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:30.648885" 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-25T23:42:30.648196" elapsed="0.000714"/>
</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-25T23:42:30.649096" elapsed="0.000909"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.652232" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:30.965752" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:29 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:42:30.651640" elapsed="0.314349"/>
</kw>
<msg time="2026-04-25T23:42:30.966120" 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="PASS" start="2026-04-25T23:42:30.650250" elapsed="0.316093"/>
</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="PASS" start="2026-04-25T23:42:30.647746" elapsed="0.318857"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:30.967153" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log'.</msg>
<msg time="2026-04-25T23:42:30.989937" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:30.990227" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:30.990326" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:30.966887" elapsed="0.023491"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:30.990879" elapsed="0.000526"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:30.992552" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:30.991871" elapsed="0.000775"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:30.993150" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:30.992863" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.992814" elapsed="0.000491"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:30.993649" elapsed="0.000101"/>
</return>
<status status="PASS" start="2026-04-25T23:42:30.993420" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:30.993387" elapsed="0.000493"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:30.993956" elapsed="0.000031"/>
</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-25T23:42:31.013257" elapsed="0.000748"/>
</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-25T23:42:31.014195" elapsed="0.000187"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.014534" 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-25T23:42:30.994658" elapsed="0.020048"/>
</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="PASS" start="2026-04-25T23:42:30.644794" elapsed="0.370011"/>
</kw>
<msg time="2026-04-25T23:42:31.014868" 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="PASS" start="2026-04-25T23:42:30.643935" elapsed="0.370999"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:30.643371" elapsed="0.371643"/>
</kw>
<msg time="2026-04-25T23:42:31.015054" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:30.642824" elapsed="0.372273"/>
</kw>
<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-25T23:42:31.018579" 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-25T23:42:31.019078" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.019407" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:31.015428" elapsed="0.004129"/>
</kw>
<msg time="2026-04-25T23:42:31.019652" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:30.641961" elapsed="0.377716"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.020164" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.019909" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:31.020252" elapsed="0.000035"/>
</return>
<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="PASS" start="2026-04-25T23:42:30.640928" elapsed="0.379458"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:42:30.640718" elapsed="0.379705"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:31.021414" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:31.021145" elapsed="0.000295"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.022339" 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-25T23:42:31.022508" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.022201" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:31.025210" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:31.024928" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.024906" elapsed="0.000387"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.025574" 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-25T23:42:31.025680" 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-25T23:42:31.025446" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.026362" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log" on remote system "10.30.171.80" 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-25T23:42:31.025892" elapsed="0.000519"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.027011" level="INFO">${conn_id} = 242</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-25T23:42:31.026573" elapsed="0.000465"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.028263" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:31.028390" 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-25T23:42:31.027743" elapsed="0.000673"/>
</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-25T23:42:31.028605" elapsed="0.000678"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.070492" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:31.388766" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:30 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:42:31.069842" elapsed="0.319161"/>
</kw>
<msg time="2026-04-25T23:42:31.389139" 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="PASS" start="2026-04-25T23:42:31.029514" elapsed="0.359844"/>
</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="PASS" start="2026-04-25T23:42:31.027259" elapsed="0.362315"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.390146" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log'.</msg>
<msg time="2026-04-25T23:42:31.413723" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:31.413974" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:31.414072" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:31.389862" elapsed="0.024262"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.414493" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.416247" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.415424" elapsed="0.000921"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.416920" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:31.416522" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.416469" elapsed="0.000612"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:31.417440" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-25T23:42:31.417199" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.417165" elapsed="0.000481"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.417863" elapsed="0.000037"/>
</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-25T23:42:31.435012" elapsed="0.000509"/>
</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-25T23:42:31.435713" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.436058" 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-25T23:42:31.418663" elapsed="0.017548"/>
</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="PASS" start="2026-04-25T23:42:31.024371" elapsed="0.411934"/>
</kw>
<msg time="2026-04-25T23:42:31.436402" 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="PASS" start="2026-04-25T23:42:31.023784" elapsed="0.412676"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:31.023222" elapsed="0.413318"/>
</kw>
<msg time="2026-04-25T23:42:31.436582" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:31.022710" elapsed="0.413951"/>
</kw>
<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-25T23:42:31.439872" 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-25T23:42:31.440364" elapsed="0.000143"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.440664" elapsed="0.000114"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:31.436984" elapsed="0.003853"/>
</kw>
<msg time="2026-04-25T23:42:31.440928" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:31.021656" elapsed="0.419298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.441389" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.441140" elapsed="0.000289"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:31.441471" elapsed="0.000028"/>
</return>
<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="PASS" start="2026-04-25T23:42:31.020732" elapsed="0.420863"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:42:31.020522" elapsed="0.421111"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:42:31.442615" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:42:31.442347" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.443650" 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-25T23:42:31.443768" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.443514" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:42:31.446439" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:31.446164" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.446145" elapsed="0.000376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.446834" 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-25T23:42:31.446936" 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-25T23:42:31.446674" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.447577" level="INFO">Attempting to execute command "/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log" on remote system "10.30.170.188" 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-25T23:42:31.447114" elapsed="0.000551"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.448275" level="INFO">${conn_id} = 245</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-25T23:42:31.447844" elapsed="0.000458"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.449662" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:42:31.449809" 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-25T23:42:31.448988" elapsed="0.000847"/>
</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-25T23:42:31.450023" elapsed="0.000682"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.452805" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:42:31.775059" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:09 UTC 2026

  System load:  0.14               Processes:             125
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:30 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:42:31.452171" elapsed="0.323110"/>
</kw>
<msg time="2026-04-25T23:42:31.775410" 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="PASS" start="2026-04-25T23:42:31.450935" elapsed="0.324647"/>
</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="PASS" start="2026-04-25T23:42:31.448532" elapsed="0.327244"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:42:31.776280" level="INFO">Executing command '/tmp/karaf-0.24.0-SNAPSHOT/bin/start -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.24.0-SNAPSHOT/data/log/gc_1777160550.636554.log'.</msg>
<msg time="2026-04-25T23:42:31.799247" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:42:31.799490" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:42:31.799588" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-25T23:42:31.776020" elapsed="0.023621"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.800054" elapsed="0.000466"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.801674" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.800992" elapsed="0.000821"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.802284" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:31.801988" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.801936" elapsed="0.000510"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:42:31.802838" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-25T23:42:31.802562" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-04-25T23:42:31.802529" elapsed="0.000495"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.803098" elapsed="0.000031"/>
</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-25T23:42:31.818717" elapsed="0.000538"/>
</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-25T23:42:31.819426" elapsed="0.000178"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.819953" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:31.803858" elapsed="0.016254"/>
</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="PASS" start="2026-04-25T23:42:31.445617" elapsed="0.374587"/>
</kw>
<msg time="2026-04-25T23:42:31.820258" 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="PASS" start="2026-04-25T23:42:31.445046" elapsed="0.375266"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:42:31.444490" elapsed="0.375902"/>
</kw>
<msg time="2026-04-25T23:42:31.820492" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:42:31.443951" elapsed="0.376590"/>
</kw>
<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-25T23:42:31.823979" elapsed="0.000314"/>
</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-25T23:42:31.824461" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:42:31.824774" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:42:31.820866" elapsed="0.004058"/>
</kw>
<msg time="2026-04-25T23:42:31.825015" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:42:31.443107" elapsed="0.381933"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.825468" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.825221" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:42:31.825550" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:42:31.441936" elapsed="0.383740"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:42:31.441750" elapsed="0.383979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:42:30.640536" elapsed="1.185231"/>
</for>
<arg>command=${command} ${gc_options}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:42:30.638120" elapsed="1.187709"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.838089" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:31.837700" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.838582" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:31.838278" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:31.838651" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:42:31.838825" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:31.837307" elapsed="0.001542"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.840400" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:31.840102" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:42:31.840471" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:42:31.840618" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:31.839727" elapsed="0.000915"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.848812" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.848532" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:31.849262" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:31.849018" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:42:31.855190" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:42:31.851537" elapsed="0.008389">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:31.849371" elapsed="0.010649">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.860222" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:31.860057" elapsed="0.000274"/>
</branch>
<status status="FAIL" start="2026-04-25T23:42:31.849352" elapsed="0.011007">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.860966" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.861103" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:31.861066" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:31.861049" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.861312" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.861382" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-25T23:42:31.843584" elapsed="0.017909">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.861566" elapsed="0.000016"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-25T23:42:31.840875" elapsed="0.020794">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.861910" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.862036" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:31.862000" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:31.861983" elapsed="0.000115"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.862295" elapsed="0.000023"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.862526" elapsed="0.000023"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-25T23:42:31.862592" elapsed="0.000015"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-25T23:42:31.839329" elapsed="0.023382">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-25T23:42:31.862833" elapsed="0.000022"/>
</continue>
<status status="NOT RUN" start="2026-04-25T23:42:31.862792" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:31.862776" elapsed="0.000127"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.863056" elapsed="0.000022"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-25T23:42:31.839097" elapsed="0.024030">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-25T23:42:31.838905" elapsed="0.024285">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-25T23:42:31.836891" elapsed="0.026396">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:31.836557" elapsed="0.026789">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</branch>
<status status="FAIL" start="2026-04-25T23:42:31.836538" elapsed="0.026869">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-25T23:42:31.863680" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:31.863478" elapsed="0.000270"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:31.863462" elapsed="0.000309"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T23:42:31.864037" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:31.863824" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:31.863808" elapsed="0.000309"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-25T23:42:31.836140" elapsed="0.028055">ConnectionError: HTTPConnectionPool(host='10.30.171.37', port=8181): Max retries exceeded with url: /jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore (Caused by NewConnectionError("HTTPConnection(host='10.30.171.37', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:41.882857" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:41.882342" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:41.883394" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:41.883069" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:41.883470" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T23:42:41.883656" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:41.881847" elapsed="0.001862"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:41.885286" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:41.884977" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:42:41.885362" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:42:41.885513" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:41.884584" elapsed="0.000955"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:41.893491" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:41.893225" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:41.893966" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:41.893716" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:42:41.955873" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:42:41.956154" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-25T23:42:41.956478" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:42:41.896353" elapsed="0.061765">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:41.894079" elapsed="0.064433">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.959171" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:41.958730" elapsed="0.000543"/>
</branch>
<status status="FAIL" start="2026-04-25T23:42:41.894060" elapsed="0.065249">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.960399" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:41.960645" elapsed="0.000054"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:41.960588" elapsed="0.000156"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:41.960561" elapsed="0.000214"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.960990" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:42:41.961091" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-25T23:42:41.888378" elapsed="0.072880">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:41.961365" elapsed="0.000023"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-25T23:42:41.885775" elapsed="0.075730">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.961847" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:42:41.962031" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:41.961979" elapsed="0.000106"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:41.961956" elapsed="0.000161"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.962401" elapsed="0.000034"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.962769" elapsed="0.000036"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-25T23:42:41.962870" elapsed="0.000020"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-25T23:42:41.884200" elapsed="0.078809">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-25T23:42:41.963179" elapsed="0.000023"/>
</continue>
<status status="NOT RUN" start="2026-04-25T23:42:41.963124" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:41.963101" elapsed="0.000168"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.963473" elapsed="0.000031"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-25T23:42:41.883966" elapsed="0.079608">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-25T23:42:41.883777" elapsed="0.079884">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-25T23:42:41.881389" elapsed="0.082436">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:41.881038" elapsed="0.082873">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<status status="FAIL" start="2026-04-25T23:42:41.881007" elapsed="0.082949">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-25T23:42:41.964372" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:41.964052" elapsed="0.000453"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:41.964029" elapsed="0.000514"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T23:42:41.964961" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:41.964624" elapsed="0.000421"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:41.964601" elapsed="0.000479"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-25T23:42:41.880488" elapsed="0.084708">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:42:51.982195" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:42:51.981544" elapsed="0.000695"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:42:51.982949" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:42:51.982482" elapsed="0.000502"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:42:51.983051" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T23:42:51.983281" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:42:51.980985" elapsed="0.002330"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:42:51.985558" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:42:51.985148" elapsed="0.000447"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:42:51.985658" elapsed="0.000060"/>
</return>
<msg time="2026-04-25T23:42:51.985884" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:42:51.984650" elapsed="0.001270"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:51.994323" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:51.994052" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:42:51.994866" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:42:51.994535" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:42:52.003548" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:42:52.003639" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-25T23:42:52.003817" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:42:51.997714" elapsed="0.006502">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:51.995008" elapsed="0.009294">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.004505" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:52.004338" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-04-25T23:42:51.994984" elapsed="0.009668">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.005247" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:52.005391" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:52.005352" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:52.005335" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.005612" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:42:52.005700" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-25T23:42:51.989228" elapsed="0.016583">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-25T23:42:52.005885" elapsed="0.000017"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-25T23:42:51.986217" elapsed="0.019769">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.006212" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:42:52.006344" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:42:52.006308" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:52.006290" elapsed="0.000118"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.006609" elapsed="0.000026"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.006856" elapsed="0.000025"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-25T23:42:52.006927" elapsed="0.000015"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-25T23:42:51.984137" elapsed="0.022891">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-25T23:42:52.007149" elapsed="0.000020"/>
</continue>
<status status="NOT RUN" start="2026-04-25T23:42:52.007108" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:52.007091" elapsed="0.000126"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.007399" elapsed="0.000027"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-25T23:42:51.983807" elapsed="0.023674">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-25T23:42:51.983520" elapsed="0.024025">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-25T23:42:51.980364" elapsed="0.027295">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:42:51.979842" elapsed="0.027911">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<status status="FAIL" start="2026-04-25T23:42:51.979806" elapsed="0.027980">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-25T23:42:52.008062" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:52.007854" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:52.007837" elapsed="0.000306"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T23:42:52.008410" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:42:52.008196" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:42:52.008180" elapsed="0.000323"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-25T23:42:51.979067" elapsed="0.029563">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:02.030180" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:02.029721" elapsed="0.000492"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:43:02.030738" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:43:02.030387" elapsed="0.000379"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:43:02.030815" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:43:02.030986" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:43:02.029296" elapsed="0.001715"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:02.032596" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:02.032280" elapsed="0.000351"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:02.032683" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T23:43:02.032854" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:02.031893" elapsed="0.000986"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:02.040799" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:02.040518" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:02.041279" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:02.041012" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:02.049607" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:02.049746" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-25T23:43:02.049932" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:43:02.043609" elapsed="0.006833">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:43:02.041391" elapsed="0.009167">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.050866" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:02.050604" elapsed="0.000356"/>
</branch>
<status status="FAIL" start="2026-04-25T23:43:02.041372" elapsed="0.009625">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.051938" elapsed="0.000052"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:02.052172" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:02.052116" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:02.052090" elapsed="0.000245"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.052548" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-25T23:43:02.052648" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-25T23:43:02.035778" elapsed="0.017047">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:02.052927" elapsed="0.000022"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-25T23:43:02.033096" elapsed="0.019966">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.053411" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:43:02.053602" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:02.053551" elapsed="0.000107"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:02.053526" elapsed="0.000188"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.054001" elapsed="0.000034"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.054312" elapsed="0.000034"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-25T23:43:02.054407" elapsed="0.000021"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-25T23:43:02.031491" elapsed="0.023058">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-25T23:43:02.054757" elapsed="0.000026"/>
</continue>
<status status="NOT RUN" start="2026-04-25T23:43:02.054660" elapsed="0.000160"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:02.054636" elapsed="0.000215"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.055053" elapsed="0.000030"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-25T23:43:02.031257" elapsed="0.023897">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-25T23:43:02.031069" elapsed="0.024210">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-25T23:43:02.028867" elapsed="0.026549">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-25T23:43:02.028505" elapsed="0.026991">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<status status="FAIL" start="2026-04-25T23:43:02.028481" elapsed="0.027060">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<arg>${member_index_list}</arg>
<status status="NOT RUN" start="2026-04-25T23:43:02.055976" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:02.055636" elapsed="0.000417"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:02.055613" elapsed="0.000472"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T23:43:02.056450" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:02.056158" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:02.056137" elapsed="0.000424"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="FAIL" start="2026-04-25T23:43:02.027981" elapsed="0.028696">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.074545" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:12.074070" elapsed="0.000508"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.075094" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:43:12.074770" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:43:12.075169" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:43:12.075339" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:43:12.073562" elapsed="0.001803"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.076904" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.076582" elapsed="0.000349"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:12.076977" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.077125" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:12.076234" elapsed="0.000916"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.086792" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.086508" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.087252" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.087000" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:12.425932" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:12.426151" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:12 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:12 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-config","member-1-shard-car-config","member-1-shard-topology-config","member-1-shard-inventory-config","member-1-shard-toaster-config","member-1-shard-people-config","member-1-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1777160592,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:12.426490" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:12.089566" elapsed="0.336991"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.087368" elapsed="0.339360"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.427224" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.426804" elapsed="0.000569"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.087349" elapsed="0.340074"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.436537" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-config","member-1-shard-car-config","member-1-shard-topology-config","member-1-shard-inventory-config","member-1-shard-toaster-config","member-1-shard-people-config","member-1-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1777160592,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.430367" elapsed="0.006268"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.429797" elapsed="0.006966"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.429751" elapsed="0.007041"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.439847" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.437096" elapsed="0.002859"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.436849" elapsed="0.003219"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.436832" elapsed="0.003264"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.444040" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.440283" elapsed="0.003793"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.444440" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.444154" elapsed="0.000459"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.445483" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.444896" elapsed="0.000669"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.444719" elapsed="0.001016"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.444134" elapsed="0.001627"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.446473" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.445931" elapsed="0.000570"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.446864" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.446572" elapsed="0.000472"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.447877" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.447262" elapsed="0.000696"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.447076" elapsed="0.001049"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.446553" elapsed="0.001598"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:12.448326" elapsed="0.000685"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:12.450163" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.449181" elapsed="0.001010"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.450351" elapsed="0.003226"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:12.428742" elapsed="0.024909"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.453863" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.453747" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.453725" elapsed="0.000209"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:12.457215" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.454085" elapsed="0.003162"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:12.457307" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T23:43:12.457488" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:12.080089" elapsed="0.377426"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:12.457580" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.457764" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:12.077364" elapsed="0.380428"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.458754" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,
 "value": {
  "LocalShards": [
   "member-1-shard-car-config",
   "member-1-shard-car-people-config",
   "member-1-shard-default-config",
   "member-1-shard-inventory-config",
   "member-1-shard-people-config",
   "member-1-shard-toaster-config",
   "member-1-shard-topology-config"
  ],
  "MemberName": "member-1",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.458434" elapsed="0.000370"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.459865" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.459375" elapsed="0.000519"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:12.459942" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:12.460160" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:12.459017" elapsed="0.001178"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.460662" level="INFO">${value_object} = {'LocalShards': ['member-1-shard-car-config', 'member-1-shard-car-people-config', 'member-1-shard-default-config', 'member-1-shard-inventory-config', 'member-1-shard-people-config', 'member-1-shard-to...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.460363" elapsed="0.000345"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.461088" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.460871" elapsed="0.000243"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.461162" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:12.461314" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:12.458048" elapsed="0.003290"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.461524" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.461412" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.461393" elapsed="0.000197"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.469445" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.469191" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.469922" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.469656" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:12.478919" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:12.479031" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:12 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:12 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-operational","member-1-shard-car-operational","member-1-shard-topology-operational","member-1-shard-inventory-operational","member-1-shard-toaster-operational","member-1-shard-people-operational","member-1-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1777160592,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:12.479194" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:12.472209" elapsed="0.007022"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.470032" elapsed="0.009259"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.479547" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.479326" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.470014" elapsed="0.009676"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.485287" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-1-shard-default-operational","member-1-shard-car-operational","member-1-shard-topology-operational","member-1-shard-inventory-operational","member-1-shard-toaster-operational","member-1-shard-people-operational","member-1-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-1"},"timestamp":1777160592,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.481434" elapsed="0.003989"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.481088" elapsed="0.004490"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.481061" elapsed="0.004557"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.490082" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.486079" elapsed="0.004133"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.485723" elapsed="0.004640"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.485696" elapsed="0.004706"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.491442" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.490649" elapsed="0.000832"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.492064" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.491580" elapsed="0.000764"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.493462" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.492626" elapsed="0.000916"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.492383" elapsed="0.001326"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.491555" elapsed="0.002179"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.494480" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.493954" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.494854" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.494577" elapsed="0.000453"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.495821" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.495223" elapsed="0.000677"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.495057" elapsed="0.000990"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.494559" elapsed="0.001512"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:12.496236" elapsed="0.000739"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:12.497991" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.497147" elapsed="0.000871"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.498180" elapsed="0.003247"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:12.480462" elapsed="0.021034"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.501696" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.501567" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.501548" elapsed="0.000218"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:12.504858" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.501916" elapsed="0.002972"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:12.504942" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:43:12.505111" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:12.464597" elapsed="0.040540"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:12.505195" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:12.505352" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:12.461815" elapsed="0.043568"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.506255" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,
 "value": {
  "LocalShards": [
   "member-1-shard-car-operational",
   "member-1-shard-car-people-operational",
   "member-1-shard-default-operational",
   "member-1-shard-inventory-operational",
   "member-1-shard-people-operational",
   "member-1-shard-toaster-operational",
   "member-1-shard-topology-operational"
  ],
  "MemberName": "member-1",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.505999" elapsed="0.000304"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.507280" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.506877" elapsed="0.000431"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:12.507357" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:12.507517" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:12.506516" elapsed="0.001027"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.507956" level="INFO">${value_object} = {'LocalShards': ['member-1-shard-car-operational', 'member-1-shard-car-people-operational', 'member-1-shard-default-operational', 'member-1-shard-inventory-operational', 'member-1-shard-people-operati...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.507725" elapsed="0.000259"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.508434" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.508179" elapsed="0.000283"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.508519" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.508718" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:12.505613" elapsed="0.003133"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.508791" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:12.508940" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.075854" elapsed="0.433111"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-25T23:43:12.509146" elapsed="0.000033"/>
</continue>
<status status="PASS" start="2026-04-25T23:43:12.509034" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.509016" elapsed="0.000219"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.509386" elapsed="0.000022"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:43:12.075609" elapsed="0.433834"/>
</iter>
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.510954" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.510629" elapsed="0.000352"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:12.511027" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.511182" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:12.510271" elapsed="0.000938"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.519132" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.518879" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.519584" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.519337" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:12.903950" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:12.904186" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:12 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:12 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-config","member-2-shard-car-config","member-2-shard-topology-config","member-2-shard-inventory-config","member-2-shard-toaster-config","member-2-shard-people-config","member-2-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1777160592,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:12.904494" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:12.521898" elapsed="0.382659"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.519711" elapsed="0.384996"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.905211" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.904792" elapsed="0.000568"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.519692" elapsed="0.385718"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.912894" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-config","member-2-shard-car-config","member-2-shard-topology-config","member-2-shard-inventory-config","member-2-shard-toaster-config","member-2-shard-people-config","member-2-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1777160592,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.908361" elapsed="0.004632"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.907791" elapsed="0.005312"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.907746" elapsed="0.005385"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.916219" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.913437" elapsed="0.002881"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.913189" elapsed="0.003238"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.913172" elapsed="0.003281"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.917224" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.916633" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.917838" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.917390" elapsed="0.000626"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.918834" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.918216" elapsed="0.000740"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.918044" elapsed="0.001069"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.917371" elapsed="0.001767"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.919861" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.919307" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.920220" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.919959" elapsed="0.000437"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.921180" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.920589" elapsed="0.000675"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.920423" elapsed="0.000992"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.919941" elapsed="0.001498"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:12.921598" elapsed="0.000688"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:12.923346" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.922456" elapsed="0.000919"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.923536" elapsed="0.003257"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:12.906672" elapsed="0.020188"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.927112" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.926931" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.926912" elapsed="0.000271"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:12.930156" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.927337" elapsed="0.002849"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:12.930239" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:43:12.930405" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:12.514290" elapsed="0.416141"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:12.930490" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:43:12.930661" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:12.511428" elapsed="0.419346"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.931661" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,
 "value": {
  "LocalShards": [
   "member-2-shard-car-config",
   "member-2-shard-car-people-config",
   "member-2-shard-default-config",
   "member-2-shard-inventory-config",
   "member-2-shard-people-config",
   "member-2-shard-toaster-config",
   "member-2-shard-topology-config"
  ],
  "MemberName": "member-2",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.931370" elapsed="0.000367"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.932731" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.932313" elapsed="0.000447"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:12.932811" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.932971" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:12.931956" elapsed="0.001074"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.933418" level="INFO">${value_object} = {'LocalShards': ['member-2-shard-car-config', 'member-2-shard-car-people-config', 'member-2-shard-default-config', 'member-2-shard-inventory-config', 'member-2-shard-people-config', 'member-2-shard-to...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.933191" elapsed="0.000254"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.933845" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.933614" elapsed="0.000257"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.933918" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.934069" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:12.931013" elapsed="0.003080"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.934280" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.934159" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.934142" elapsed="0.000204"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.942260" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.941997" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.942722" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.942461" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:12.952853" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:12.952978" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:12 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:12 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-operational","member-2-shard-car-operational","member-2-shard-topology-operational","member-2-shard-inventory-operational","member-2-shard-toaster-operational","member-2-shard-people-operational","member-2-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1777160592,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:12.953141" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:12.945228" elapsed="0.007950"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.942831" elapsed="0.010410"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.953509" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.953280" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.942813" elapsed="0.010817"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.959473" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-2-shard-default-operational","member-2-shard-car-operational","member-2-shard-topology-operational","member-2-shard-inventory-operational","member-2-shard-toaster-operational","member-2-shard-people-operational","member-2-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-2"},"timestamp":1777160592,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.955434" elapsed="0.004211"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.955038" elapsed="0.004818"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.955012" elapsed="0.004947"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.963236" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.960427" elapsed="0.002904"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.960045" elapsed="0.003394"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.960021" elapsed="0.003445"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.964208" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.963635" elapsed="0.000601"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.964574" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.964312" elapsed="0.000465"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.965597" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.964973" elapsed="0.000720"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.964804" elapsed="0.001040"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.964293" elapsed="0.001576"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.966572" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.966035" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.966974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:12.966671" elapsed="0.000477"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.968010" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.967393" elapsed="0.000697"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.967177" elapsed="0.001061"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.966650" elapsed="0.001612"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:12.968417" elapsed="0.000705"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:12.970108" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.969290" elapsed="0.000845"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.970305" elapsed="0.003131"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:12.954362" elapsed="0.019141"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:12.973698" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:12.973573" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.973554" elapsed="0.000215"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:12.976880" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.973914" elapsed="0.002994"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:12.976961" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:43:12.977121" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:12.937347" elapsed="0.039800"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:12.977203" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:12.977349" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:12.934553" elapsed="0.042823"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.978221" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160592,
 "value": {
  "LocalShards": [
   "member-2-shard-car-operational",
   "member-2-shard-car-people-operational",
   "member-2-shard-default-operational",
   "member-2-shard-inventory-operational",
   "member-2-shard-people-operational",
   "member-2-shard-toaster-operational",
   "member-2-shard-topology-operational"
  ],
  "MemberName": "member-2",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.977967" elapsed="0.000303"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.979399" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:12.978947" elapsed="0.000483"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:12.979483" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:43:12.979652" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160592, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:12.978479" elapsed="0.001216"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.980089" level="INFO">${value_object} = {'LocalShards': ['member-2-shard-car-operational', 'member-2-shard-car-people-operational', 'member-2-shard-default-operational', 'member-2-shard-inventory-operational', 'member-2-shard-people-operati...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.979865" elapsed="0.000285"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:12.980531" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:12.980310" elapsed="0.000246"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.980604" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:12.980773" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:12.977588" elapsed="0.003210"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-25T23:43:12.980843" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:43:12.980989" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.509843" elapsed="0.471170"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-25T23:43:12.981193" elapsed="0.000033"/>
</continue>
<status status="PASS" start="2026-04-25T23:43:12.981081" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.981064" elapsed="0.000217"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:12.981428" elapsed="0.000023"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:43:12.509595" elapsed="0.471897"/>
</iter>
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.983175" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:12.982872" elapsed="0.000330"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:12.983248" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:12.983450" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:12.982471" elapsed="0.001004"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.991204" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.990950" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:12.991726" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:12.991455" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:13.309860" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:13.310072" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:13 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:13 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-config","member-3-shard-car-config","member-3-shard-topology-config","member-3-shard-inventory-config","member-3-shard-toaster-config","member-3-shard-people-config","member-3-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1777160593,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:13.310379" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:12.994011" elapsed="0.316432"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.991839" elapsed="0.318716"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.311068" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.310619" elapsed="0.000599"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.991820" elapsed="0.319446"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.319553" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-config","member-3-shard-car-config","member-3-shard-topology-config","member-3-shard-inventory-config","member-3-shard-toaster-config","member-3-shard-people-config","member-3-shard-car-people-config"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1777160593,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.314222" elapsed="0.005481"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.313607" elapsed="0.006223"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.313566" elapsed="0.006292"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.322941" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.320165" elapsed="0.002868"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.319919" elapsed="0.003283"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.319901" elapsed="0.003330"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.324001" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.323425" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.324402" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.324112" elapsed="0.000492"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.325465" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.324828" elapsed="0.000721"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.324633" elapsed="0.001084"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.324093" elapsed="0.001649"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.326442" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.325909" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.326827" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.326540" elapsed="0.000465"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.327795" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.327196" elapsed="0.000680"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.327032" elapsed="0.000997"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.326522" elapsed="0.001532"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:13.328214" elapsed="0.000696"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:13.329946" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.329080" elapsed="0.000894"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.330132" elapsed="0.003127"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:13.312505" elapsed="0.020827"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.333571" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:13.333457" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.333436" elapsed="0.000204"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:13.336781" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160593,...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:13.333803" elapsed="0.003009"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:13.336865" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:43:13.337034" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160593,...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:12.986292" elapsed="0.350768"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:13.337119" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:13.337267" level="INFO">${conf_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160593,...</msg>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:12.983708" elapsed="0.353586"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.338207" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160593,
 "value": {
  "LocalShards": [
   "member-3-shard-car-config",
   "member-3-shard-car-people-config",
   "member-3-shard-default-config",
   "member-3-shard-inventory-config",
   "member-3-shard-people-config",
   "member-3-shard-toaster-config",
   "member-3-shard-topology-config"
  ],
  "MemberName": "member-3",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.337949" elapsed="0.000309"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.339322" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160593, 'value': {...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.338911" elapsed="0.000474"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:13.339437" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:13.339606" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160593, 'value': {...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:13.338475" elapsed="0.001165"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:13.340058" level="INFO">${value_object} = {'LocalShards': ['member-3-shard-car-config', 'member-3-shard-car-people-config', 'member-3-shard-default-config', 'member-3-shard-inventory-config', 'member-3-shard-people-config', 'member-3-shard-to...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.339826" elapsed="0.000260"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:13.340470" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.340254" elapsed="0.000241"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:13.340543" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:13.340735" level="INFO">${conf_status} = True</msg>
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:13.337551" elapsed="0.003209"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.340941" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:13.340832" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.340813" elapsed="0.000193"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.348908" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.348640" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.349356" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.349110" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:13.358744" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:13.358852" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:43:13 GMT', 'Expires': 'Sat, 25 Apr 2026 22:43:13 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-operational","member-3-shard-car-operational","member-3-shard-topology-operational","member-3-shard-inventory-operational","member-3-shard-toaster-operational","member-3-shard-people-operational","member-3-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1777160593,"status":200} 
 </msg>
<msg time="2026-04-25T23:43:13.359015" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:13.351715" elapsed="0.007342"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.349511" elapsed="0.009608"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.359390" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.359154" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.349491" elapsed="0.010019"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.365121" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore","type":"read"},"value":{"LocalShards":["member-3-shard-default-operational","member-3-shard-car-operational","member-3-shard-topology-operational","member-3-shard-inventory-operational","member-3-shard-toaster-operational","member-3-shard-people-operational","member-3-shard-car-people-operational"],"SyncStatus":true,"MemberName":"member-3"},"timestamp":1777160593,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.361260" elapsed="0.004049"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.360919" elapsed="0.004557"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.360894" elapsed="0.004719"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.368907" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.366171" elapsed="0.002828"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.365812" elapsed="0.003297"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.365782" elapsed="0.003354"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.369946" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.369324" elapsed="0.000649"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.370343" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.370043" elapsed="0.000475"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.371303" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.370733" elapsed="0.000650"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.370545" elapsed="0.000987"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.370026" elapsed="0.001530"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.372299" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.371776" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.372653" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.372396" elapsed="0.000450"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.373625" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.373039" elapsed="0.000709"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.372873" elapsed="0.001023"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.372378" elapsed="0.001542"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:13.374077" elapsed="0.000673"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:13.375724" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.374918" elapsed="0.000833"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.375909" elapsed="0.003197"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:13.360284" elapsed="0.018890"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.379363" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:13.379243" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.379224" elapsed="0.000206"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:13.382425" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:13.379574" elapsed="0.002880"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:13.382506" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:43:13.382664" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:13.344038" elapsed="0.038671"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:13.382768" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:13.382918" level="INFO">${oper_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1...</msg>
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:43:13.341214" elapsed="0.041731"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.384000" level="INFO">{
 "request": {
  "mbean": "org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160593,
 "value": {
  "LocalShards": [
   "member-3-shard-car-operational",
   "member-3-shard-car-people-operational",
   "member-3-shard-default-operational",
   "member-3-shard-inventory-operational",
   "member-3-shard-people-operational",
   "member-3-shard-toaster-operational",
   "member-3-shard-topology-operational"
  ],
  "MemberName": "member-3",
  "SyncStatus": true
 }
}
</msg>
<arg>${shard_manager_text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.383706" elapsed="0.000343"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.385024" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160593, ...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.384607" elapsed="0.000446"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:43:13.385101" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:13.385262" level="INFO">${manager_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=ShardManager,name=shard-manager-operational,type=DistributedOperationalDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160593, ...</msg>
<var>${manager_object}</var>
<arg>${shard_manager_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:43:13.384260" elapsed="0.001062"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:13.385821" level="INFO">${value_object} = {'LocalShards': ['member-3-shard-car-operational', 'member-3-shard-car-people-operational', 'member-3-shard-default-operational', 'member-3-shard-inventory-operational', 'member-3-shard-people-operati...</msg>
<var>${value_object}</var>
<arg>dictionary=${manager_object}</arg>
<arg>key=value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.385484" elapsed="0.000365"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:13.386223" level="INFO">${sync_status} = True</msg>
<var>${sync_status}</var>
<arg>dictionary=${value_object}</arg>
<arg>key=SyncStatus</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.386009" elapsed="0.000240"/>
</kw>
<return>
<value>${sync_status}</value>
<status status="PASS" start="2026-04-25T23:43:13.386301" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:13.386452" level="INFO">${oper_status} = True</msg>
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="PASS" start="2026-04-25T23:43:13.383160" elapsed="0.003317"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="PASS" start="2026-04-25T23:43:13.386521" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:43:13.386688" level="INFO">${status} = True</msg>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="PASS" start="2026-04-25T23:43:12.982070" elapsed="0.404645"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="PASS" start="2026-04-25T23:43:13.386898" elapsed="0.000032"/>
</continue>
<status status="PASS" start="2026-04-25T23:43:13.386786" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.386769" elapsed="0.000215"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.387132" elapsed="0.000022"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:43:12.981643" elapsed="0.405546"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:43:12.075422" elapsed="1.311804"/>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="PASS" start="2026-04-25T23:43:12.073132" elapsed="1.314156"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:12.072762" elapsed="1.314558"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:12.072737" elapsed="1.314608"/>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.388854" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:13.388452" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.389349" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:43:13.389044" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:43:13.389419" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:13.389573" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:43:13.388073" elapsed="0.001525"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.390707" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.390393" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:13.390778" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:13.390924" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:13.390046" elapsed="0.000903"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.488133" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.487348" elapsed="0.000887"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:13.489767" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:13.489466" elapsed="0.000378">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:13.490040" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:13.488502" elapsed="0.001635"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.491388" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:13.490433" elapsed="0.001054"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:43:13.492187" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:43:13.492487" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:43:13.491798" elapsed="0.000787"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.493578" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.493030" elapsed="0.000706"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.495398" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.495136" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.495896" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:13.495603" elapsed="0.000319"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.496254" elapsed="0.000021"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.496459" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.496635" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:43:13.496117" elapsed="0.000621"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.495972" elapsed="0.000797"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:43:13.496816" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:43:13.497129" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:43:13.494622" elapsed="0.002540"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.493851" elapsed="0.003358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.497594" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.497304" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.493816" elapsed="0.004022"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.498964" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:13.498048" elapsed="0.001016"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:43:13.499138" elapsed="0.000031"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:43:13.486206" elapsed="0.013189"/>
</kw>
<msg time="2026-04-25T23:43:13.499452" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:13.431042" elapsed="0.068462"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.513370" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.526403" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.539533" elapsed="0.000034"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.539837" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.540026" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.540445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.540295" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:13.540279" elapsed="0.000385"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.540836" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.541008" elapsed="0.000020"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.541175" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:43:13.540248" elapsed="0.000980"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.540106" elapsed="0.001150"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.541406" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.541482" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:43:13.541608" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:43:13.426541" elapsed="0.115092"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:13.543116" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:13.542727" elapsed="0.000462">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:13.543283" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:13.542324" elapsed="0.000983"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.543632" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:13.543377" elapsed="0.000334"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.544337" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:13.543924" elapsed="0.000439"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.543737" elapsed="0.000661"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.543358" elapsed="0.001062"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.546996" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:13.544575" elapsed="0.002448"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:43:13.547074" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:43:13.547230" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:13.541982" elapsed="0.005273"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:13.548609" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:13.548256" elapsed="0.000433">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:13.548786" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:13.547913" elapsed="0.000898"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:43:13.549018" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:43:13.548881" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.548863" elapsed="0.000237"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.549284" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:13.549458" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:13.549524" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:43:13.551741" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:13.547565" elapsed="0.004203"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.553186" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.552929" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:13.553636" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:13.553391" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:14.012075" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:14.017051" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01tijp9427l83310ed6kanc2ptx0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:43:13 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:43:14.017746" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:13.555964" elapsed="0.461851"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.553769" elapsed="0.464159"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.018377" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.017998" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.553751" elapsed="0.464718"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.023078" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.019889" elapsed="0.003583"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.019576" elapsed="0.004194"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.019555" elapsed="0.004251"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.026959" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.024114" elapsed="0.002938"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.023865" elapsed="0.003293"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.023848" elapsed="0.003338"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.027959" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.027372" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.028324" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.028056" elapsed="0.000445"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.029328" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.028732" elapsed="0.000675"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.028529" elapsed="0.001029"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.028038" elapsed="0.001544"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.030289" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.029767" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.030644" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.030386" elapsed="0.000452"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.031601" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.031030" elapsed="0.000666"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.030865" elapsed="0.000984"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.030368" elapsed="0.001506"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:14.032043" elapsed="0.000792"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:14.033938" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.033008" elapsed="0.000958"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:14.034127" elapsed="0.003281"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:14.019072" elapsed="0.018405"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.037662" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:14.037549" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.037530" elapsed="0.000221"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:14.048727" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:14.037900" elapsed="0.010860"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:14.048814" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:43:14.048986" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:13.552085" elapsed="0.496927"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.049078" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:43:14.049228" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:43:13.402655" elapsed="0.646599"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.049619" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.049367" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.049349" elapsed="0.000425"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.049808" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:43:13.396181" elapsed="0.653753"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:43:13.389876" elapsed="0.660101"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.050964" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.050632" elapsed="0.000360"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:14.051037" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:43:14.051184" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:14.050250" elapsed="0.000964"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.148430" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.147473" elapsed="0.001060"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.149768" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.149479" elapsed="0.000387">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.150060" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.148825" elapsed="0.001333"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.151328" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:14.150425" elapsed="0.001015"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.152099" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:43:14.152400" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:43:14.151753" elapsed="0.000754"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.153305" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.152762" elapsed="0.000685"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.155242" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.154975" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.155745" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:14.155450" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.156107" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.156315" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.156491" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:43:14.155971" elapsed="0.000576"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.155826" elapsed="0.000751"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:43:14.156624" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:43:14.156957" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:43:14.154416" elapsed="0.002573"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.153566" elapsed="0.003469"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.157411" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.157122" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.153530" elapsed="0.004049"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.159171" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.157923" elapsed="0.001355"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.159362" elapsed="0.000036"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:43:14.146029" elapsed="0.013623"/>
</kw>
<msg time="2026-04-25T23:43:14.159735" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:14.090773" elapsed="0.069023"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.173032" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.186227" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.199324" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.199528" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.199723" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.200140" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.199989" elapsed="0.000339"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:14.199973" elapsed="0.000382"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.200501" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.200695" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.200868" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:43:14.199942" elapsed="0.000979"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.199801" elapsed="0.001146"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.201096" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.201172" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:43:14.201293" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:43:14.085913" elapsed="0.115406"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.202815" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.202435" elapsed="0.000448">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.202977" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.202044" elapsed="0.000958"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.203326" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.203072" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.204053" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.203629" elapsed="0.000450"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.203406" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.203054" elapsed="0.001083"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.206648" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:14.204291" elapsed="0.002400"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:43:14.206746" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:43:14.206909" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:14.201710" elapsed="0.005224"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.208323" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.207972" elapsed="0.000416">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.208483" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.207576" elapsed="0.000931"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:43:14.208734" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:43:14.208578" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.208560" elapsed="0.000259"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.208970" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.209145" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.209212" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:43:14.211421" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:14.207244" elapsed="0.004205"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.212906" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.212637" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.213364" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.213115" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:14.712516" level="INFO">GET Request : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:14.713520" level="INFO">GET Response : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node02zpldxxfy9f419tr9cyo5zr7c0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:43:14 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:43:14.713944" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:14.215884" elapsed="0.498102"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.213473" elapsed="0.500592"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.714466" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.714109" elapsed="0.000484"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.213456" elapsed="0.501172"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.721098" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.716532" elapsed="0.004935"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.716164" elapsed="0.005426"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.716134" elapsed="0.005484"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.724700" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.721945" elapsed="0.002888"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.721692" elapsed="0.003254"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.721659" elapsed="0.003314"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.725729" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.725156" elapsed="0.000601"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.726096" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.725828" elapsed="0.000443"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.727067" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.726471" elapsed="0.000676"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.726299" elapsed="0.001114"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.725810" elapsed="0.001635"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.728365" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.727828" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.728749" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.728463" elapsed="0.000513"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.729770" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.729172" elapsed="0.000678"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.729004" elapsed="0.001003"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.728445" elapsed="0.001588"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:14.730194" elapsed="0.000685"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:14.731930" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.731049" elapsed="0.000908"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:14.732116" elapsed="0.003182"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:14.715444" elapsed="0.019923"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.735550" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:14.735438" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.735419" elapsed="0.000201"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:14.746969" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:14.735855" elapsed="0.011146"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:14.747057" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:43:14.747231" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:14.211824" elapsed="0.535434"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.747324" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:43:14.747478" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:43:14.062085" elapsed="0.685419"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.747877" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.747590" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.747572" elapsed="0.000451"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.748059" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:43:14.055597" elapsed="0.692591"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:43:14.050078" elapsed="0.698154"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.749447" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.749125" elapsed="0.000349"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:43:14.749520" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:14.749697" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:43:14.748517" elapsed="0.001208"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.845957" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.845133" elapsed="0.000932"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.847481" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.847198" elapsed="0.000365">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.847772" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.846345" elapsed="0.001525"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.848994" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:14.848137" elapsed="0.000956"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.849731" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:43:14.850029" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:43:14.849335" elapsed="0.000791"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.851088" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.850359" elapsed="0.000870"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.852936" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.852653" elapsed="0.000328"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.853450" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:14.853144" elapsed="0.000333"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.853840" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.854051" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.854230" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:43:14.853696" elapsed="0.000591"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.853531" elapsed="0.000787"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:43:14.854370" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:43:14.854734" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:43:14.852154" elapsed="0.002615"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.851349" elapsed="0.003466"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.855190" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.854902" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.851311" elapsed="0.004103"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.856861" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:14.855952" elapsed="0.001008"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:43:14.857036" elapsed="0.000032"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:43:14.844012" elapsed="0.013287"/>
</kw>
<msg time="2026-04-25T23:43:14.857357" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:14.788634" elapsed="0.068817"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.870658" elapsed="0.000041"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.883945" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.896870" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.897078" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.897256" elapsed="0.000020"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.897718" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.897520" elapsed="0.000390"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:43:14.897505" elapsed="0.000433"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.898085" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.898255" elapsed="0.000021"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.898423" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:43:14.897473" elapsed="0.001003"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.897332" elapsed="0.001171"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.898651" elapsed="0.000039"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.898748" elapsed="0.000016"/>
</return>
<msg time="2026-04-25T23:43:14.898871" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:43:14.784095" elapsed="0.114802"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.900355" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.899984" elapsed="0.000445">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.900522" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.899602" elapsed="0.000945"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.900888" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:14.900617" elapsed="0.000328"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.901561" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:14.901151" elapsed="0.000452"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.900969" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.900598" elapsed="0.001064"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.904147" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:14.901832" elapsed="0.002342"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:43:14.904225" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:43:14.904382" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:14.899267" elapsed="0.005140"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:43:14.905790" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:43:14.905402" elapsed="0.000452">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:43:14.905948" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:43:14.905062" elapsed="0.000911"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:43:14.906178" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:43:14.906043" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.906024" elapsed="0.000237"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.906413" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:14.906586" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:14.906651" elapsed="0.000015"/>
</return>
<msg time="2026-04-25T23:43:14.908826" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:43:14.904733" elapsed="0.004120"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.910286" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.910033" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:14.910764" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:14.910486" elapsed="0.000322"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:43:15.440833" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:43:15.441896" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node02zl960qnaey4be16aao8oe6p0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:43:15 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:43:15.442493" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:43:14.913031" elapsed="0.529529"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:14.910873" elapsed="0.531827"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:15.443187" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.442771" elapsed="0.000563"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:14.910854" elapsed="0.532528"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.450708" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:15.446346" elapsed="0.004615"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:15.445776" elapsed="0.005294"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.445729" elapsed="0.005370"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.454156" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:15.451403" elapsed="0.002847"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:15.451157" elapsed="0.003202"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.451139" elapsed="0.003247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.455144" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:15.454570" elapsed="0.000601"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:15.455513" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.455241" elapsed="0.000465"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.456523" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:15.455904" elapsed="0.000699"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:15.455734" elapsed="0.001051"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.455223" elapsed="0.001587"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.457488" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:15.456975" elapsed="0.000540"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:15.457865" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.457585" elapsed="0.000457"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.458825" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:43:15.458234" elapsed="0.000671"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:15.458069" elapsed="0.000984"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.457566" elapsed="0.001512"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:15.459238" elapsed="0.000681"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:43:15.460986" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:43:15.460090" elapsed="0.000924"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:43:15.461173" elapsed="0.003188"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:43:15.444653" elapsed="0.019776"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:43:15.464613" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:15.464500" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.464481" elapsed="0.000294"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:43:15.475644" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:43:15.464927" elapsed="0.010763"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:43:15.475746" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:43:15.475918" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:43:14.909167" elapsed="0.566778"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:15.476011" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:43:15.476165" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:43:14.760418" elapsed="0.715774"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:15.476557" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.476300" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.476279" elapsed="0.000429"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:43:15.476743" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:43:14.753967" elapsed="0.722904"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:43:14.748338" elapsed="0.728578"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:43:13.389655" elapsed="2.087299"/>
</for>
<arg>${member_index_list}</arg>
<status status="PASS" start="2026-04-25T23:43:13.387688" elapsed="2.089329"/>
</kw>
<status status="PASS" start="2026-04-25T23:43:13.387402" elapsed="2.089646"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:13.387386" elapsed="2.089688"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T23:43:15.477474" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.477132" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.477116" elapsed="0.000440"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="PASS" start="2026-04-25T23:43:12.072214" elapsed="3.405393"/>
</kw>
<arg>${timeout}</arg>
<arg>10s</arg>
<arg>Verify_Members_Are_Ready</arg>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:42:31.825997" elapsed="43.651691"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement" type="TEARDOWN">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.481355" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:43:15.480964" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.481872" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:43:15.481545" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:43:15.481943" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:43:15.482097" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:43:15.480536" elapsed="0.001586"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:15.483315" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:15.483048" elapsed="0.000293"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.484192" 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-25T23:43:15.484309" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:43:15.484021" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:43:15.487003" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.486729" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.486709" elapsed="0.000376"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.488785" 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-25T23:43:15.488915" 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-25T23:43:15.487232" elapsed="0.001712"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.489579" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.37" 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-25T23:43:15.489103" elapsed="0.000523"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.490270" level="INFO">${conn_id} = 248</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-25T23:43:15.489814" elapsed="0.000482"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.491381" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:43:15.491474" 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-25T23:43:15.491000" elapsed="0.000498"/>
</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-25T23:43:15.491659" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.493584" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:43:15.815045" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.0                Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:30 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:43:15.492971" elapsed="0.322383"/>
</kw>
<msg time="2026-04-25T23:43:15.815532" 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="PASS" start="2026-04-25T23:43:15.492402" elapsed="0.323378"/>
</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="PASS" start="2026-04-25T23:43:15.490517" elapsed="0.325432"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.816782" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:43:15.829786" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:43:15.830092" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:43:15.830202" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:43:15.816318" elapsed="0.013940"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:15.830699" elapsed="0.000496"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.832340" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:15.831631" elapsed="0.000810"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:15.832957" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:15.832619" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.832571" elapsed="0.000543"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:43:15.833460" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-04-25T23:43:15.833230" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.833197" elapsed="0.000454"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:15.833763" elapsed="0.000034"/>
</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-25T23:43:15.839018" elapsed="0.000879"/>
</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-25T23:43:15.840153" elapsed="0.000239"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:15.840614" elapsed="0.000170"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:43:15.834477" elapsed="0.006387"/>
</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="PASS" start="2026-04-25T23:43:15.486150" elapsed="0.354852"/>
</kw>
<msg time="2026-04-25T23:43:15.841084" 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="PASS" start="2026-04-25T23:43:15.485587" elapsed="0.355598"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:43:15.485028" elapsed="0.356272"/>
</kw>
<msg time="2026-04-25T23:43:15.841360" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:15.484496" elapsed="0.356947"/>
</kw>
<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-25T23:43:15.844980" elapsed="0.000455"/>
</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-25T23:43:15.845620" elapsed="0.000186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:15.845975" elapsed="0.000099"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:43:15.841946" elapsed="0.004180"/>
</kw>
<msg time="2026-04-25T23:43:15.846222" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:43:15.483560" elapsed="0.362687"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.846772" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:15.846485" elapsed="0.000329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:43:15.846859" elapsed="0.000033"/>
</return>
<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="PASS" start="2026-04-25T23:43:15.482496" elapsed="0.364493"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:43:15.482316" elapsed="0.364712"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:15.848061" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:15.847785" elapsed="0.000303"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.848946" 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-25T23:43:15.849050" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:43:15.848798" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:43:15.851822" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:15.851526" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:15.851505" elapsed="0.000400"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.852184" 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-25T23:43:15.852285" 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-25T23:43:15.852057" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.852960" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.171.80" 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-25T23:43:15.852466" elapsed="0.000541"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.853578" level="INFO">${conn_id} = 251</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-25T23:43:15.853166" elapsed="0.000440"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:43:15.854734" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:43:15.854831" 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-25T23:43:15.854318" elapsed="0.000538"/>
</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-25T23:43:15.855018" elapsed="0.000525"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:43:15.857126" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:43:16.183730" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:42:20 UTC 2026

  System load:  0.03               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:31 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:43:15.856478" elapsed="0.327467"/>
</kw>
<msg time="2026-04-25T23:43:16.184161" 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="PASS" start="2026-04-25T23:43:15.855735" elapsed="0.328572"/>
</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="PASS" start="2026-04-25T23:43:15.853842" elapsed="0.330588"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.184977" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:43:16.197352" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:43:16.197612" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:43:16.197767" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:43:16.184706" elapsed="0.013122"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.198214" elapsed="0.000524"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.199984" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:16.199174" elapsed="0.000918"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.200576" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:16.200273" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:16.200221" elapsed="0.000569"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:43:16.201166" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-25T23:43:16.200919" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:16.200882" elapsed="0.000478"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.201437" elapsed="0.000033"/>
</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-25T23:43:16.208578" elapsed="0.000603"/>
</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-25T23:43:16.209357" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.209693" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:43:16.202218" elapsed="0.007645"/>
</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="PASS" start="2026-04-25T23:43:15.850958" elapsed="0.359000"/>
</kw>
<msg time="2026-04-25T23:43:16.210015" 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="PASS" start="2026-04-25T23:43:15.850368" elapsed="0.359715"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:43:15.849773" elapsed="0.360393"/>
</kw>
<msg time="2026-04-25T23:43:16.210213" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:15.849236" elapsed="0.361038"/>
</kw>
<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-25T23:43:16.213349" elapsed="0.000322"/>
</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-25T23:43:16.213853" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.214147" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:43:16.210584" elapsed="0.003711"/>
</kw>
<msg time="2026-04-25T23:43:16.214388" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:43:15.848336" elapsed="0.366077"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.214877" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:16.214596" elapsed="0.000323"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:43:16.214962" elapsed="0.000028"/>
</return>
<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="PASS" start="2026-04-25T23:43:15.847319" elapsed="0.367768"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:43:15.847130" elapsed="0.367995"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:43:16.216211" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:43:16.215933" elapsed="0.000305"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.217124" 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-25T23:43:16.217227" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.216983" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:43:16.220395" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:43:16.220100" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:16.220077" elapsed="0.000408"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.220803" 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-25T23:43:16.220912" 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-25T23:43:16.220639" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.221613" level="INFO">Attempting to execute command "netstat -pnatu | grep 2550" on remote system "10.30.170.188" 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-25T23:43:16.221098" elapsed="0.000565"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.222288" level="INFO">${conn_id} = 254</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-25T23:43:16.221862" elapsed="0.000453"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.223476" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:43:16.223578" 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-25T23:43:16.223033" elapsed="0.000571"/>
</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-25T23:43:16.223798" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.225775" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:43:16.797396" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:43:16 UTC 2026

  System load:  0.86               Processes:             126
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:42:31 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:43:16.225120" elapsed="0.572502"/>
</kw>
<msg time="2026-04-25T23:43:16.797802" 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="PASS" start="2026-04-25T23:43:16.224534" elapsed="0.573413"/>
</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="PASS" start="2026-04-25T23:43:16.222539" elapsed="0.575527"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:43:16.798595" level="INFO">Executing command 'netstat -pnatu | grep 2550'.</msg>
<msg time="2026-04-25T23:43:16.811124" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:43:16.811400" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:43:16.811500" level="INFO">${stderr} = bash: line 1: netstat: command not found</msg>
<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="PASS" start="2026-04-25T23:43:16.798325" elapsed="0.013227"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.811968" elapsed="0.000474"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.813577" level="INFO">bash: line 1: netstat: command not found</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:16.812901" elapsed="0.000820"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.814244" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:43:16.813944" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:16.813889" elapsed="0.000513"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:43:16.814792" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-25T23:43:16.814518" elapsed="0.000405"/>
</branch>
<status status="PASS" start="2026-04-25T23:43:16.814485" elapsed="0.000596"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.815164" elapsed="0.000033"/>
</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-25T23:43:16.820404" elapsed="0.000584"/>
</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-25T23:43:16.821157" elapsed="0.000166"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.821492" 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-25T23:43:16.815903" elapsed="0.005749"/>
</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="PASS" start="2026-04-25T23:43:16.219465" elapsed="0.602302"/>
</kw>
<msg time="2026-04-25T23:43:16.821838" 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="PASS" start="2026-04-25T23:43:16.218796" elapsed="0.603107"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:43:16.217951" elapsed="0.604032"/>
</kw>
<msg time="2026-04-25T23:43:16.822030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:43:16.217416" elapsed="0.604671"/>
</kw>
<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-25T23:43:16.825104" 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-25T23:43:16.825609" elapsed="0.000195"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:43:16.825990" elapsed="0.000101"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:43:16.822383" elapsed="0.003760"/>
</kw>
<msg time="2026-04-25T23:43:16.826235" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:43:16.216514" elapsed="0.609747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.826709" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:43:16.826443" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:43:16.826794" elapsed="0.000030"/>
</return>
<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="PASS" start="2026-04-25T23:43:16.215448" elapsed="0.611471"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:43:16.215222" elapsed="0.611736"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:43:15.482179" elapsed="1.344817"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T23:43:15.477973" elapsed="1.349085"/>
</kw>
<doc>If the list is empty, start all cluster members. Otherwise, start members based on present indices.
If ${wait_for_sync}, wait for cluster sync on listed members.
Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
Garbage collection is unconditionally logged to files. TODO: Make that reasonable conditional?</doc>
<status status="PASS" start="2026-04-25T23:42:30.627123" elapsed="46.199988"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.839111" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:16.838798" elapsed="0.000341"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:43:16.859461" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:16.859183" elapsed="0.000321">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:16.858713" elapsed="0.000932">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:43:16.859721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:16.849359" elapsed="0.010413"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:16.848937" elapsed="0.010932">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:16.860266" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:16.860588" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:16.860801" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:16.860969" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:16.861134" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:43:16.860118" elapsed="0.001068"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.860021" elapsed="0.001194"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:43:16.861260" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:43:16.834561" elapsed="0.026798">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:26.880765" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:26.880373" elapsed="0.000425"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:43:26.901055" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:26.900773" elapsed="0.000321">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:26.900283" elapsed="0.000935">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:43:26.901278" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:26.891040" elapsed="0.010319"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:26.890619" elapsed="0.010847">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:26.901816" elapsed="0.000023"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:26.902133" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:26.902324" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:26.902489" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:26.902653" elapsed="0.000034"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:43:26.901632" elapsed="0.001091"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:26.901542" elapsed="0.001210"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:43:26.902803" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:43:26.875344" elapsed="0.027562">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:36.922925" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:36.922527" elapsed="0.000432"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:43:36.943274" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:36.943003" elapsed="0.000310">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:36.942511" elapsed="0.000922">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:43:36.943493" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:36.933004" elapsed="0.010538"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:36.932565" elapsed="0.011072">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:36.943956" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:36.944274" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:36.944465" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:36.944630" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:36.944843" elapsed="0.000022"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:43:36.943811" elapsed="0.001088"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:36.943724" elapsed="0.001203"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:43:36.944971" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:43:36.918092" elapsed="0.026982">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:46.962436" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:46.962027" elapsed="0.000451"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:43:46.982659" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:46.982385" elapsed="0.000327">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:46.981897" elapsed="0.000941">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:43:46.982899" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:46.972497" elapsed="0.010450"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:46.972008" elapsed="0.011032">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:46.983346" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:46.983659" elapsed="0.000040"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:46.983872" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:46.984123" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:46.984292" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:43:46.983199" elapsed="0.001146"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:46.983111" elapsed="0.001264"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:43:46.984424" elapsed="0.000019"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:43:46.957648" elapsed="0.026879">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:43:57.000872" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:43:57.000467" elapsed="0.000442"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:43:57.020576" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:57.020301" elapsed="0.000313">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:57.019834" elapsed="0.000920">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:43:57.020816" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:43:57.010765" elapsed="0.010102"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:43:57.010347" elapsed="0.010613">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:57.021268" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:57.021581" elapsed="0.000024"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:57.021787" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:57.021952" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:43:57.022117" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:43:57.021121" elapsed="0.001047"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:43:57.021031" elapsed="0.001167"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:43:57.022247" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:43:56.995989" elapsed="0.026361">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:07.040419" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:07.040025" elapsed="0.000429"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:07.060646" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:07.060336" elapsed="0.000367">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:07.059855" elapsed="0.000968">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:07.060884" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:07.050490" elapsed="0.010442"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:07.050088" elapsed="0.011019">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:07.061409" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:07.061729" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:07.061920" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:07.062082" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:07.062246" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:07.061266" elapsed="0.001033"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:07.061178" elapsed="0.001149"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:07.062372" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:07.035151" elapsed="0.027322">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:17.081089" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:17.080699" elapsed="0.000425"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:17.101623" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:17.101338" elapsed="0.000411">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:17.100830" elapsed="0.001056">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:17.101946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:17.091517" elapsed="0.010478"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:17.091102" elapsed="0.010988">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:17.102409" elapsed="0.000026"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:17.102768" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:17.102964" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:17.103128" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:17.103292" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:17.102253" elapsed="0.001092"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:17.102161" elapsed="0.001214"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:17.103421" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:17.075028" elapsed="0.028509">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:27.123136" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:27.122738" elapsed="0.000433"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:27.142790" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:27.142501" elapsed="0.000327">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:27.142031" elapsed="0.000981">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:27.143076" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:27.133032" elapsed="0.010098"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:27.132624" elapsed="0.010599">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:27.143527" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:27.143855" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:27.144048" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:27.144211" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:27.144373" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:27.143384" elapsed="0.001041"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:27.143293" elapsed="0.001162"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:27.144503" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:27.118269" elapsed="0.026336">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:37.161210" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:37.160844" elapsed="0.000401"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:37.181245" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:37.180978" elapsed="0.000304">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:37.180495" elapsed="0.000906">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:37.181460" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:37.171146" elapsed="0.010361"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:37.170752" elapsed="0.010848">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:37.181912" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:37.182219" elapsed="0.000024"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:37.182503" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:37.182681" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:37.182851" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:37.181769" elapsed="0.001134"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:37.181680" elapsed="0.001252"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:37.182977" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:37.156460" elapsed="0.026616">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:47.203049" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:47.202552" elapsed="0.000533"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:47.225086" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:47.224733" elapsed="0.000407">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:47.224134" elapsed="0.001195">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:47.225409" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:47.214522" elapsed="0.010948"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:47.214076" elapsed="0.011490">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:47.225909" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:47.226270" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:47.226466" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:47.226631" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:47.226815" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:47.225757" elapsed="0.001112"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:47.225642" elapsed="0.001257"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:47.226946" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:47.196492" elapsed="0.030557">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:44:57.246245" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:44:57.245873" elapsed="0.000406"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:44:57.266009" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:57.265741" elapsed="0.000307">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:57.265255" elapsed="0.000920">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:44:57.266313" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:44:57.256134" elapsed="0.010231"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:44:57.255745" elapsed="0.010715">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:57.266797" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:57.267108" elapsed="0.000029"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:57.267303" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:57.267469" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:44:57.267636" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:44:57.266629" elapsed="0.001074"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:44:57.266542" elapsed="0.001190"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:44:57.267781" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:44:57.241574" elapsed="0.026309">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:07.285537" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:07.285155" elapsed="0.000417"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:07.306976" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:07.306705" elapsed="0.000312">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:07.306220" elapsed="0.000922">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:07.307201" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:07.295468" elapsed="0.011781"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:07.295039" elapsed="0.012301">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:07.307640" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:07.307980" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:07.308171" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:07.308335" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:07.308510" elapsed="0.000021"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:07.307496" elapsed="0.001069"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:07.307408" elapsed="0.001186"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:07.308639" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:07.280828" elapsed="0.027932">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:17.328309" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:17.327924" elapsed="0.000420"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:17.348049" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:17.347773" elapsed="0.000313">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:17.347271" elapsed="0.000938">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:17.348269" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:17.338223" elapsed="0.010103"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:17.337802" elapsed="0.010620">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:17.348737" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:17.349048" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:17.349239" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:17.349404" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:17.349571" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:17.348577" elapsed="0.001046"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:17.348491" elapsed="0.001161"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:17.349713" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:17.322094" elapsed="0.027720">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:27.371168" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:27.370644" elapsed="0.000570"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:27.391362" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:27.391093" elapsed="0.000305">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:27.390603" elapsed="0.000918">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:27.391581" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:27.381556" elapsed="0.010074"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:27.381162" elapsed="0.010578">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:27.392054" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:27.392363" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:27.392656" elapsed="0.000035"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:27.392840" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:27.393007" elapsed="0.000021"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:27.391911" elapsed="0.001150"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:27.391821" elapsed="0.001268"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:27.393134" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:27.364605" elapsed="0.028630">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:37.413511" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:37.413130" elapsed="0.000415"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:37.433506" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:37.433235" elapsed="0.000309">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:37.432761" elapsed="0.000920">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:37.433744" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:37.423485" elapsed="0.010309"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:37.423065" elapsed="0.010822">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:37.434186" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:37.434490" elapsed="0.000024"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:37.434693" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:37.434859" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:37.435023" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:37.434043" elapsed="0.001033"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:37.433957" elapsed="0.001147"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:37.435148" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:37.408598" elapsed="0.026650">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:47.455807" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:47.455376" elapsed="0.000467"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:47.475462" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:47.475189" elapsed="0.000310">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:47.474719" elapsed="0.000927">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:47.475816" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:47.465715" elapsed="0.010155"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:47.465283" elapsed="0.010685">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:47.476299" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:47.476615" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:47.476827" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:47.476991" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:47.477176" elapsed="0.000022"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:47.476141" elapsed="0.001098"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:47.476038" elapsed="0.001248"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:47.477345" elapsed="0.000023"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:47.450465" elapsed="0.027001">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:45:57.495395" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:45:57.495028" elapsed="0.000400"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:45:57.515255" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:57.514987" elapsed="0.000305">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:57.514506" elapsed="0.000908">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:45:57.515474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:45:57.505335" elapsed="0.010186"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:45:57.504941" elapsed="0.010672">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:57.515928" elapsed="0.000029"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:57.516238" elapsed="0.000024"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:57.516428" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:57.516590" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:45:57.516779" elapsed="0.000021"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:45:57.515784" elapsed="0.001050"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:45:57.515696" elapsed="0.001167"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:45:57.516907" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:45:57.489576" elapsed="0.027431">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:07.534561" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:07.534083" elapsed="0.000513"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:07.555696" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:07.555412" elapsed="0.000323">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:07.554897" elapsed="0.000958">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:07.555915" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:07.545431" elapsed="0.010533"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:07.545034" elapsed="0.011023">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:07.556355" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:07.556718" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:07.556911" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:07.557074" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:07.557239" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:07.556211" elapsed="0.001081"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:07.556126" elapsed="0.001194"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:07.557365" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:07.529353" elapsed="0.028111">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:17.576941" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:17.576544" elapsed="0.000432"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:17.597012" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:17.596739" elapsed="0.000311">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:17.596255" elapsed="0.000922">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:17.597237" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:17.587005" elapsed="0.010281"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:17.586590" elapsed="0.010791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:17.597703" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:17.598022" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:17.598299" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:17.598465" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:17.598631" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:17.597540" elapsed="0.001147"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:17.597452" elapsed="0.001277"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:17.598775" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:17.572018" elapsed="0.026859">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:27.619131" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:27.618754" elapsed="0.000412"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:27.639398" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:27.639131" elapsed="0.000304">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:27.638647" elapsed="0.000908">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:27.639617" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:27.629427" elapsed="0.010238"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:27.629010" elapsed="0.010767">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:27.640076" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:27.640380" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:27.640571" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:27.640753" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:27.640921" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:27.639933" elapsed="0.001041"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:27.639847" elapsed="0.001156"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:27.641049" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:27.613890" elapsed="0.027259">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:37.659490" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:37.659126" elapsed="0.000398"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:37.679545" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:37.679276" elapsed="0.000306">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:37.678805" elapsed="0.000926">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:37.679876" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:37.669451" elapsed="0.010476"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:37.669056" elapsed="0.010966">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:37.680319" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:37.680623" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:37.680833" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:37.680999" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:37.681165" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:37.680175" elapsed="0.001044"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:37.680089" elapsed="0.001159"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:37.681293" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:37.654716" elapsed="0.026677">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:47.700148" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:47.699716" elapsed="0.000466"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:47.720082" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:47.719808" elapsed="0.000312">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:47.719327" elapsed="0.000950">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:47.720347" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:47.710120" elapsed="0.010277"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:47.709718" elapsed="0.010772">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:47.720840" elapsed="0.000027"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:47.721166" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:47.721358" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:47.721522" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:47.721709" elapsed="0.000022"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:47.720650" elapsed="0.001114"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:47.720561" elapsed="0.001233"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:47.721842" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:47.694588" elapsed="0.027356">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:46:57.738741" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:46:57.738350" elapsed="0.000426"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:46:57.758704" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:57.758407" elapsed="0.000340">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:57.757912" elapsed="0.000970">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:46:57.758943" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:46:57.748810" elapsed="0.010184"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:46:57.748349" elapsed="0.010739">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:57.759408" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:57.759742" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:57.759935" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:57.760098" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:46:57.760262" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:46:57.759260" elapsed="0.001054"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:46:57.759166" elapsed="0.001178"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:46:57.760390" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:46:57.734011" elapsed="0.026481">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:07.778408" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:07.778035" elapsed="0.000407"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:07.798416" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:07.798135" elapsed="0.000324">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:07.797622" elapsed="0.000963">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:07.798659" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:07.788294" elapsed="0.010428"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:07.787868" elapsed="0.010950">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:07.799122" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:07.799435" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:07.799729" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:07.799897" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:07.800064" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:07.798976" elapsed="0.001141"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:07.798887" elapsed="0.001258"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:07.800189" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:07.773702" elapsed="0.026587">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:17.818164" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:17.817777" elapsed="0.000421"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:17.837921" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:17.837638" elapsed="0.000320">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:17.837177" elapsed="0.000900">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:17.838136" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:17.828065" elapsed="0.010121"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:17.827660" elapsed="0.010618">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:17.838590" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:17.838913" elapsed="0.000026"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:17.839104" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:17.839268" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:17.839431" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:17.838445" elapsed="0.001039"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:17.838358" elapsed="0.001155"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:17.839558" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:17.812867" elapsed="0.026791">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:27.859018" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:27.858632" elapsed="0.000421"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:27.879068" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:27.878784" elapsed="0.000324">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:27.878294" elapsed="0.000943">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:27.879387" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:27.868989" elapsed="0.010450"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:27.868567" elapsed="0.010992">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:27.879928" elapsed="0.000022"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:27.880242" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:27.880433" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:27.880598" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:27.880781" elapsed="0.000021"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:27.879774" elapsed="0.001062"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:27.879633" elapsed="0.001232"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:27.880910" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:27.853616" elapsed="0.027397">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:37.898651" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:37.898271" elapsed="0.000430"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:37.918570" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:37.918300" elapsed="0.000307">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:37.917829" elapsed="0.000916">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:37.918807" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:37.908467" elapsed="0.010389"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:37.908078" elapsed="0.010869">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:37.919247" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:37.919549" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:37.919754" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:37.919921" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:37.920101" elapsed="0.000021"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:37.919103" elapsed="0.001052"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:37.919017" elapsed="0.001167"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:37.920230" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:37.892729" elapsed="0.027601">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:47.940325" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:47.939946" elapsed="0.000414"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:47.960076" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:47.959806" elapsed="0.000308">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:47.959328" elapsed="0.000905">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:47.960291" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:47.950234" elapsed="0.010105"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:47.949839" elapsed="0.010594">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:47.960748" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:47.961057" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:47.961246" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:47.961409" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:47.961573" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:47.960589" elapsed="0.001036"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:47.960502" elapsed="0.001151"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:47.961721" elapsed="0.000019"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:47.934388" elapsed="0.027434">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:47:57.981658" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:47:57.981297" elapsed="0.000408"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:47:58.001242" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:58.000976" elapsed="0.000303">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:58.000499" elapsed="0.000899">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:47:58.001457" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:47:57.991517" elapsed="0.009988"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:47:57.991124" elapsed="0.010475">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:58.001916" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:58.002226" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:58.002499" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:58.002665" elapsed="0.000037"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:47:58.002853" elapsed="0.000019"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:47:58.001771" elapsed="0.001135"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:47:58.001681" elapsed="0.001254"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:47:58.002982" elapsed="0.000047"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:47:57.976998" elapsed="0.026120">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:08.020488" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:08.020105" elapsed="0.000417"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:48:08.041624" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:48:08.041358" elapsed="0.000303">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:48:08.040881" elapsed="0.000915">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:48:08.041855" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:48:08.030409" elapsed="0.011495"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:48:08.030010" elapsed="0.011984">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:08.042286" elapsed="0.000021"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:08.042586" elapsed="0.000031"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:08.042797" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:08.042961" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:08.043123" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:48:08.042145" elapsed="0.001030"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:48:08.042061" elapsed="0.001141"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:48:08.043246" elapsed="0.000017"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:48:08.015357" elapsed="0.027988">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.061505" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.061110" elapsed="0.000437"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.081886" level="FAIL">Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:48:18.081597" elapsed="0.000327">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to chromium and in case chromium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:48:18.081087" elapsed="0.000960">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:48:18.082192" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-25T23:48:18.071873" elapsed="0.010370"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to chromium and in case chromium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="FAIL" start="2026-04-25T23:48:18.071433" elapsed="0.010905">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.082638" elapsed="0.000020"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.082961" elapsed="0.000025"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.083157" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.083321" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.083485" elapsed="0.000020"/>
</kw>
<var name="${shard_details}"/>
<status status="NOT RUN" start="2026-04-25T23:48:18.082493" elapsed="0.001045"/>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="NOT RUN" start="2026-04-25T23:48:18.082407" elapsed="0.001160"/>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-25T23:48:18.083613" elapsed="0.000018"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-25T23:48:18.056764" elapsed="0.026965">Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<msg time="2026-04-25T23:48:18.083825" level="FAIL">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</msg>
<arg>300s</arg>
<arg>10s</arg>
<arg>ShardStability.Shards_Stability_Get_Details</arg>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T23:43:16.827283" elapsed="301.256659">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<arg>ps -ef | grep java</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:18.084201" elapsed="0.000024"/>
</kw>
<doc>Start each member and wait for sync.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-25T23:42:30.622203" elapsed="347.462174">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: Dictionary '${Stream_dict}' has no key 'chromium'.</status>
</test>
<kw name="Close All Connections" owner="SSHLibrary" type="TEARDOWN">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-25T23:48:18.085106" elapsed="0.000287"/>
</kw>
<doc>Set tell-based protocol usage

Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

Suite stops all odl nodes, un-comment usage of tell-based protocol in
config file (means make it true) and starts all nodes again.</doc>
<status status="FAIL" start="2026-04-25T23:40:08.578689" elapsed="489.506742"/>
</suite>
<suite id="s1-s2" name="010 Crud Mdsal Perf" source="/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot">
<kw name="Start Suite" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.176652" 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-25T23:48:18.172747" elapsed="0.003971"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T23:48:18.172505" elapsed="0.004281"/>
</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-25T23:48:18.181310" 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-25T23:48:18.177897" elapsed="0.003441"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T23:48:18.181585" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:18.181455" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.181419" elapsed="0.000238"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.182184" 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-25T23:48:18.181826" elapsed="0.000403"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.182713" level="INFO">${cluster_size} = 3</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-25T23:48:18.182385" elapsed="0.000355"/>
</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-25T23:48:18.183235" elapsed="0.000282"/>
</kw>
<msg time="2026-04-25T23:48:18.183618" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:18.183739" level="INFO">${possibly_int_of_members} = 3</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-25T23:48:18.182901" elapsed="0.000864"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.184310" level="INFO">${int_of_members} = 3</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-25T23:48:18.183929" elapsed="0.000408"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.185355" 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-25T23:48:18.185085" elapsed="0.000332"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.185851" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:18.185567" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.186318" 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-25T23:48:18.186029" elapsed="0.000316"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.189273" elapsed="0.000241"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.190018" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.189688" elapsed="0.000357"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.190198" elapsed="0.000233"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.191397" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.190928" elapsed="0.000497"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:18.191473" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:48:18.191637" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:18.190618" elapsed="0.001044"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:18.192278" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.37:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a12196b90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:48:18.191837" elapsed="0.000592"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.192589" elapsed="0.000211"/>
</kw>
<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="PASS" start="2026-04-25T23:48:18.188715" elapsed="0.004146"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:18.188517" elapsed="0.004389"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.193775" elapsed="0.000195"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.194452" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.194124" elapsed="0.000355"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.194625" elapsed="0.000239"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.195633" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.195336" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:18.195723" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:18.195875" level="INFO">${session_alias} = ClusterManagement__session_2</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:18.195047" elapsed="0.000853"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:18.196459" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.80:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a121ed150&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:48:18.196051" elapsed="0.000521"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.196788" elapsed="0.000209"/>
</kw>
<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="PASS" start="2026-04-25T23:48:18.193171" elapsed="0.003886"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:18.192993" elapsed="0.004147"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.198003" elapsed="0.000189"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.198718" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.198342" elapsed="0.000405"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.198894" elapsed="0.000222"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.199897" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:18.199583" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:18.199969" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:18.200121" level="INFO">${session_alias} = ClusterManagement__session_3</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:18.199298" elapsed="0.000848"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:18.200709" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.188:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a101a07d0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:48:18.200292" elapsed="0.000525"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.200970" elapsed="0.000188"/>
</kw>
<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="PASS" start="2026-04-25T23:48:18.197424" elapsed="0.003793"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:18.197229" elapsed="0.004031"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-25T23:48:18.186403" elapsed="0.014887"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.201899" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</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-25T23:48:18.201476" elapsed="0.000467"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.202499" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.37', 2: '10.30.171.80', 3: '10.30.170.188'}</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-25T23:48:18.202098" elapsed="0.000444"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.203100" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</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-25T23:48:18.202711" 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-25T23:48:18.184620" elapsed="0.018579"/>
</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-25T23:48:18.177539" elapsed="0.025717"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:18.203435" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:18.203320" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.203302" elapsed="0.000200"/>
</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-25T23:48:18.206640" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:18.206255" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.207145" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:18.206835" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:18.207216" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:18.207372" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:18.205935" elapsed="0.001461"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:18.208378" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.208111" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.209184" 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-25T23:48:18.209286" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:18.209027" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:48:18.212630" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:18.212064" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.212044" elapsed="0.000729"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.213414" 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-25T23:48:18.213648" 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-25T23:48:18.212966" elapsed="0.000751"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.214640" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.37" 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-25T23:48:18.213979" elapsed="0.000785"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.215937" 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-25T23:48:18.215026" elapsed="0.000961"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.217753" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:48:18.217936" 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-25T23:48:18.217326" elapsed="0.000655"/>
</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-25T23:48:18.218313" elapsed="0.000601"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.220163" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:48:18.817309" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:48:18 UTC 2026

  System load:  0.06               Processes:             121
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:43:15 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:48:18.219704" elapsed="0.597752"/>
</kw>
<msg time="2026-04-25T23:48:18.817542" 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="PASS" start="2026-04-25T23:48:18.219254" elapsed="0.598522"/>
</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="PASS" start="2026-04-25T23:48:18.216414" elapsed="0.601527"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.818843" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:48:18.831165" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:48:18.831517" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:48:18.831791" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:48:18.818325" elapsed="0.013574"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:18.832540" elapsed="0.001100"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.836089" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:18.834881" elapsed="0.001434"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:18.837254" elapsed="0.000109"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:18.836719" elapsed="0.000814"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.836617" elapsed="0.000998"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:48:18.838316" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-25T23:48:18.837921" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.837882" elapsed="0.000617"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:18.838558" elapsed="0.000016"/>
</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-25T23:48:18.841554" elapsed="0.000562"/>
</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-25T23:48:18.842383" elapsed="0.000298"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:18.842934" elapsed="0.000226"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:18.839040" elapsed="0.004189"/>
</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="PASS" start="2026-04-25T23:48:18.211104" elapsed="0.632300"/>
</kw>
<msg time="2026-04-25T23:48:18.843460" 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="PASS" start="2026-04-25T23:48:18.210478" elapsed="0.633035"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:48:18.210000" elapsed="0.633593"/>
</kw>
<msg time="2026-04-25T23:48:18.843635" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:18.209486" elapsed="0.634210"/>
</kw>
<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-25T23:48:18.846280" 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-25T23:48:18.846766" elapsed="0.000148"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:18.847054" elapsed="0.000096"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:18.843983" elapsed="0.003219"/>
</kw>
<msg time="2026-04-25T23:48:18.847295" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:48:18.208616" elapsed="0.638705"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.847765" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:18.847498" elapsed="0.000309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:48:18.847850" elapsed="0.000031"/>
</return>
<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="PASS" start="2026-04-25T23:48:18.207760" elapsed="0.640217"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:18.207574" elapsed="0.640442"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:18.848940" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:18.848640" elapsed="0.000327"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.849779" 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-25T23:48:18.849885" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:18.849534" elapsed="0.000377"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:48:18.853392" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:18.852839" elapsed="0.000636"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:18.852819" elapsed="0.000694"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.854160" 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-25T23:48:18.854394" 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-25T23:48:18.853729" elapsed="0.000717"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.855441" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.80" 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-25T23:48:18.854778" elapsed="0.000769"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.856734" level="INFO">${conn_id} = 4</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-25T23:48:18.855821" elapsed="0.000965"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:48:18.858522" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:48:18.858711" 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-25T23:48:18.858157" elapsed="0.000599"/>
</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-25T23:48:18.859085" elapsed="0.000459"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:48:18.860663" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:48:19.445930" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:48:19 UTC 2026

  System load:  0.09               Processes:             119
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:43:16 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:48:18.860335" elapsed="0.585774"/>
</kw>
<msg time="2026-04-25T23:48:19.446197" 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="PASS" start="2026-04-25T23:48:18.859898" elapsed="0.586461"/>
</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="PASS" start="2026-04-25T23:48:18.857211" elapsed="0.589300"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:48:19.447378" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:48:19.460363" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:48:19.460773" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:48:19.461005" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:48:19.446896" elapsed="0.014218"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:19.461802" elapsed="0.001148"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:19.465492" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:19.464191" elapsed="0.001663"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:19.466881" elapsed="0.000112"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:19.466294" elapsed="0.000858"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:19.466240" elapsed="0.000965"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:48:19.467624" elapsed="0.000117"/>
</return>
<status status="PASS" start="2026-04-25T23:48:19.467315" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:19.467292" elapsed="0.000613"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:19.467988" elapsed="0.000023"/>
</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-25T23:48:19.472539" elapsed="0.000661"/>
</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-25T23:48:19.473573" elapsed="0.000568"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:19.474491" elapsed="0.000331"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:19.468640" elapsed="0.006277"/>
</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="PASS" start="2026-04-25T23:48:18.851893" elapsed="0.623262"/>
</kw>
<msg time="2026-04-25T23:48:19.475298" 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="PASS" start="2026-04-25T23:48:18.851263" elapsed="0.624112"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:48:18.850552" elapsed="0.624935"/>
</kw>
<msg time="2026-04-25T23:48:19.475544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:18.850061" elapsed="0.625546"/>
</kw>
<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-25T23:48:19.479153" elapsed="0.000345"/>
</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-25T23:48:19.479655" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:19.479959" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:19.476029" elapsed="0.004078"/>
</kw>
<msg time="2026-04-25T23:48:19.480206" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:48:18.849181" elapsed="0.631057"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:19.480660" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:19.480411" elapsed="0.000310"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:48:19.480764" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:48:18.848286" elapsed="0.632602"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:18.848111" elapsed="0.632815"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:19.481881" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:19.481548" elapsed="0.000360"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:19.482616" 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-25T23:48:19.482732" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:19.482480" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:48:19.486003" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:19.485402" elapsed="0.000728"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:19.485383" elapsed="0.000788"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:19.486821" 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-25T23:48:19.487056" 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-25T23:48:19.486368" elapsed="0.000741"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:19.488106" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.188" 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-25T23:48:19.487415" elapsed="0.000813"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:19.489421" 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-25T23:48:19.488495" elapsed="0.000978"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:48:19.491339" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:48:19.491514" 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-25T23:48:19.490964" elapsed="0.000592"/>
</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-25T23:48:19.491906" elapsed="0.000709"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:48:19.493759" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:48:20.107764" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:48:19 UTC 2026

  System load:  0.08               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 6%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:43:16 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:48:19.493410" elapsed="0.614593"/>
</kw>
<msg time="2026-04-25T23:48:20.108085" 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="PASS" start="2026-04-25T23:48:19.492973" elapsed="0.615268"/>
</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="PASS" start="2026-04-25T23:48:19.489926" elapsed="0.618459"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:48:20.109247" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:48:20.121436" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:48:20.121760" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:48:20.121915" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:48:20.108760" elapsed="0.013227"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.122524" elapsed="0.000832"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:20.125869" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:20.124556" elapsed="0.001543"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:20.127078" elapsed="0.000109"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:20.126487" elapsed="0.000865"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:20.126434" elapsed="0.001001"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:48:20.128132" elapsed="0.000142"/>
</return>
<status status="PASS" start="2026-04-25T23:48:20.127609" elapsed="0.000837"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:20.127571" elapsed="0.000959"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:48:20.128663" elapsed="0.000066"/>
</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-25T23:48:20.133146" elapsed="0.000454"/>
</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-25T23:48:20.133884" elapsed="0.000285"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.134442" elapsed="0.000224"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:20.129744" elapsed="0.005073"/>
</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="PASS" start="2026-04-25T23:48:19.484485" elapsed="0.650503"/>
</kw>
<msg time="2026-04-25T23:48:20.135045" 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="PASS" start="2026-04-25T23:48:19.483897" elapsed="0.651204"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:48:19.483406" elapsed="0.651772"/>
</kw>
<msg time="2026-04-25T23:48:20.135224" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:19.482909" elapsed="0.652360"/>
</kw>
<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-25T23:48:20.137717" 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-25T23:48:20.138184" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.138490" elapsed="0.000102"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:20.135553" elapsed="0.003091"/>
</kw>
<msg time="2026-04-25T23:48:20.138792" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:48:19.482130" elapsed="0.656744"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:20.139302" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:20.139048" elapsed="0.000296"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:48:20.139387" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:48:19.481197" elapsed="0.658314"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:19.481022" elapsed="0.658527"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:18.207448" elapsed="1.932137"/>
</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-25T23:48:18.203727" elapsed="1.935916"/>
</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-25T23:48:20.139811" elapsed="0.000214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:20.152913" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:20.152803" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:20.152783" elapsed="0.000200"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:20.153267" 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-25T23:48:20.153372" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.153131" elapsed="0.000267"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:20.153816" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:20.153542" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:20.154259" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:20.154010" elapsed="0.000292"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:20.155099" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:48:20.154876" elapsed="0.000332">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-25T23:48:20.155313" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:20.155359" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:20.154503" elapsed="0.000879"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:20.155691" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:20.155457" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:20.155438" elapsed="0.000353"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:20.156516" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:20.156251" elapsed="0.000291"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:48:20.156589" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:20.156755" level="INFO">${odl_ip} = 10.30.171.37</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:20.155988" elapsed="0.000791"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:48:20.156924" elapsed="0.000395"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:20.157585" level="INFO">index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:48:20.157699" level="INFO">${karaf_connection_object} = index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.157478" elapsed="0.000248"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:20.157867" elapsed="0.002010"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:48:20.160292" level="INFO">Logging into '10.30.171.37:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:48:21.064722" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:48:20.160033" elapsed="0.904951"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:21.068513" elapsed="0.000408"/>
</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-25T23:48:21.069085" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.069399" elapsed="0.000106"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:21.066138" elapsed="0.003423"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:21.065391" elapsed="0.004218"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:48:20.152504" elapsed="0.917158"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:48:20.140742" elapsed="0.928999"/>
</kw>
<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="PASS" start="2026-04-25T23:48:20.140364" elapsed="0.929432"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:20.140229" elapsed="0.929610"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:21.082979" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:21.082845" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:21.082817" elapsed="0.000244"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.083414" 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-25T23:48:21.083543" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.083250" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:21.084028" level="INFO">{1: 10}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:21.083750" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:21.084461" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:21.084218" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:21.085274" level="FAIL">Dictionary does not contain key '2'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:48:21.085040" elapsed="0.000339">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-04-25T23:48:21.085487" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:21.085533" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:21.084656" elapsed="0.000900"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:21.085887" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:21.085641" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:21.085614" elapsed="0.000373"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:21.086799" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.086465" elapsed="0.000363"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:48:21.086880" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:48:21.087040" level="INFO">${odl_ip} = 10.30.171.80</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:21.086183" elapsed="0.000883"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.087220" elapsed="0.000470"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.087969" level="INFO">index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:48:21.088071" level="INFO">${karaf_connection_object} = index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.087860" elapsed="0.000300"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.088312" elapsed="0.002111"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.090867" level="INFO">Logging into '10.30.171.80:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:48:21.879546" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.090583" elapsed="0.789162"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:21.884127" elapsed="0.000508"/>
</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-25T23:48:21.884895" elapsed="0.000243"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.885338" elapsed="0.000142"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:21.881185" elapsed="0.004369"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:21.880240" elapsed="0.005380"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.082492" elapsed="0.803232"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:48:21.070467" elapsed="0.815326"/>
</kw>
<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="PASS" start="2026-04-25T23:48:21.070096" elapsed="0.815770"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:21.069944" elapsed="0.815980"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:21.899373" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:21.899253" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:21.899229" elapsed="0.000220"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.899750" 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-25T23:48:21.899860" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.899599" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:21.900299" level="INFO">{1: 10, 2: 12}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:21.900034" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:21.900768" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:21.900490" elapsed="0.000323"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:21.901550" level="FAIL">Dictionary does not contain key '3'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:48:21.901320" elapsed="0.000339">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-04-25T23:48:21.901784" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:48:21.901831" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:21.900965" elapsed="0.000889"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:21.902147" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:21.901930" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:21.901911" elapsed="0.000334"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:21.903058" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.902788" elapsed="0.000297"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:48:21.903132" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:48:21.903289" level="INFO">${odl_ip} = 10.30.170.188</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:21.902500" elapsed="0.000813"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.903461" elapsed="0.000416"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.904148" level="INFO">index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:48:21.904248" level="INFO">${karaf_connection_object} = index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.904041" elapsed="0.000233"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.904415" elapsed="0.002040"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:48:21.906890" level="INFO">Logging into '10.30.170.188:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:48:22.702284" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:48:21.906614" elapsed="0.795845"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:22.705812" elapsed="0.000379"/>
</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-25T23:48:22.706354" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:22.706692" elapsed="0.000108"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:22.703603" elapsed="0.003250"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:22.702898" elapsed="0.004003"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:48:21.898954" elapsed="0.808000"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:48:21.886794" elapsed="0.820210"/>
</kw>
<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="PASS" start="2026-04-25T23:48:21.886256" elapsed="0.820802"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:21.886061" elapsed="0.821041"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-25T23:48:20.140080" elapsed="2.567060"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T23:48:18.177071" elapsed="4.530134"/>
</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-25T23:48:22.709785" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.709616" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.709594" elapsed="0.000265"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.714257" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.714151" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.714134" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:22.715288" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:22.714891" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:22.715863" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:22.715533" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:22.715935" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:48:22.716102" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:22.714546" elapsed="0.001581"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.721158" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.721049" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.721030" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.722443" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.722315" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.722296" elapsed="0.000218"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:22.723003" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:22.722654" elapsed="0.000376"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:22.723414" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:22.723185" elapsed="0.000255"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:22.808158" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:22.724105" elapsed="0.084256"/>
</kw>
<msg time="2026-04-25T23:48:22.808545" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:22.808593" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.723594" elapsed="0.085036"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:22.956215" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:22.809503" elapsed="0.146894"/>
</kw>
<msg time="2026-04-25T23:48:22.956536" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:22.956583" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.808881" elapsed="0.147738"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:22.957081" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:22.956792" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.956760" elapsed="0.000507"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:22.957926" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:22.957408" elapsed="0.000620"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:22.958334" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:22.958099" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.958079" elapsed="0.000430"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:22.958550" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:22.961033" elapsed="0.000526"/>
</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-25T23:48:22.961932" elapsed="0.000309"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:22.962567" elapsed="0.000576"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:22.960230" elapsed="0.003009"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:22.958985" elapsed="0.004393"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:22.722025" elapsed="0.241462"/>
</kw>
<msg time="2026-04-25T23:48:22.963586" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:22.963632" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.721375" elapsed="0.242313"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:22.963884" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:48:22.963772" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.963752" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:22.964396" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:22.964775" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.964855" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:22.720757" elapsed="0.244209"/>
</kw>
<msg time="2026-04-25T23:48:22.965065" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:22.965111" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.716492" elapsed="0.248656"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:22.965497" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:22.965224" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.965207" elapsed="0.000369"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:22.716358" elapsed="0.249247"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.970927" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.970817" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.970796" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:22.972160" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:22.972033" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:22.972015" elapsed="0.000213"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:22.972703" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:22.972365" elapsed="0.000366"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:22.973106" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:22.972882" elapsed="0.000251"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:23.058481" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:22.973822" elapsed="0.084822"/>
</kw>
<msg time="2026-04-25T23:48:23.058887" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:23.058934" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.973315" elapsed="0.085656"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:23.198076" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:23.059738" elapsed="0.138537"/>
</kw>
<msg time="2026-04-25T23:48:23.198437" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:23.198568" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:23.059150" elapsed="0.139458"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.199036" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.198732" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.198700" elapsed="0.000523"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.199879" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.199364" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.200281" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.200047" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.200028" elapsed="0.000430"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:23.200498" elapsed="0.000041"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:23.202605" elapsed="0.000472"/>
</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-25T23:48:23.203406" elapsed="0.000532"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:23.204257" elapsed="0.000233"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:23.201809" elapsed="0.002768"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:23.200823" elapsed="0.003901"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:22.971746" elapsed="0.233082"/>
</kw>
<msg time="2026-04-25T23:48:23.204922" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:23.204967" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.971143" elapsed="0.233860"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:23.205200" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.205080" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.205061" elapsed="0.000253"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.205763" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.206369" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.206451" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:22.970400" elapsed="0.236165"/>
</kw>
<msg time="2026-04-25T23:48:23.206662" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:23.206727" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:22.965898" elapsed="0.240868"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.207091" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.206842" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.206824" elapsed="0.000346"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:22.965763" elapsed="0.241431"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.212449" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:23.212342" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.212324" elapsed="0.000192"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.213824" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:23.213692" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.213647" elapsed="0.000246"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:23.214389" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.214031" elapsed="0.000385"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:23.214858" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:23.214566" elapsed="0.000321"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:23.292311" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:23.215575" elapsed="0.076876"/>
</kw>
<msg time="2026-04-25T23:48:23.292586" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:23.292634" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:23.215072" elapsed="0.077641"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:23.435161" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:23.293395" elapsed="0.141988"/>
</kw>
<msg time="2026-04-25T23:48:23.435557" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:23.435603" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:23.292888" elapsed="0.142753"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.436093" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.435766" elapsed="0.000474"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.435733" elapsed="0.000538"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.436850" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "0 "1 "0 "_ "c "r "u "d "_ "m "d "s "a "l "_ "p "e "r "f ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.436415" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.437244" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.437014" elapsed="0.000387"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.436996" elapsed="0.000431"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:23.437467" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:23.439560" elapsed="0.000463"/>
</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-25T23:48:23.440349" elapsed="0.000296"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:23.440976" elapsed="0.000231"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:23.438800" elapsed="0.002523"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:23.437800" elapsed="0.003655"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:23.213338" elapsed="0.228218"/>
</kw>
<msg time="2026-04-25T23:48:23.441652" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:23.441722" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:23.212661" elapsed="0.229099"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:23.441944" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.441837" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.441819" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.442499" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.443028" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.443101" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:23.212041" elapsed="0.231169"/>
</kw>
<msg time="2026-04-25T23:48:23.443307" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:23.443351" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:23.207459" elapsed="0.235929"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.443723" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.443464" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.443447" elapsed="0.000353"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:23.207324" elapsed="0.236500"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:22.716182" elapsed="0.727677"/>
</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-25T23:48:22.713860" elapsed="0.730060"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T23:48:22.707817" elapsed="0.736163"/>
</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-25T23:48:22.707359" elapsed="0.736668"/>
</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-25T23:48:18.172194" elapsed="5.271888"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.444998" 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-25T23:48:23.444643" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-25T23:48:23.445213" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.445095" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.445078" elapsed="0.000217"/>
</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-25T23:48:23.445444" 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-25T23:48:23.445612" 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-25T23:48:23.445808" 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-25T23:48:23.445982" 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-25T23:48:23.446453" 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-25T23:48:23.444347" elapsed="0.002195"/>
</kw>
<kw name="Set_Variables_For_Shard" owner="CarPeople">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.452787" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.452389" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.453290" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:23.452966" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:23.453361" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:23.453546" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:23.452071" elapsed="0.001502"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-25T23:48:23.453736" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.454446" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.454104" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.454892" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:23.454625" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.455309" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:23.455061" elapsed="0.000274"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.457627" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.457328" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:23.457722" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:23.457873" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:23.457001" elapsed="0.000896"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.503808" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.503404" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.504632" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.504369" elapsed="0.000367">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.504832" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.504015" elapsed="0.000841"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.505425" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.505033" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.505789" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:23.505972" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:23.505625" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.506421" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.506167" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.507386" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.507132" elapsed="0.000297"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.507877" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.507580" elapsed="0.000324"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.508216" elapsed="0.000024"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.508430" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.508595" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:48:23.508089" elapsed="0.000563"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.507951" elapsed="0.000755"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:23.508750" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:23.508910" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:23.506867" elapsed="0.002067"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.506554" elapsed="0.002412"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.509126" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.508989" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.506533" elapsed="0.002671"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.509910" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.509444" elapsed="0.000494"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:23.510007" elapsed="0.000030"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:23.502588" elapsed="0.007634"/>
</kw>
<msg time="2026-04-25T23:48:23.510297" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:23.490338" elapsed="0.020026"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.550657" elapsed="0.000047"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.591171" elapsed="0.000029"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.631996" elapsed="0.000032"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.632343" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.632600" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.633360" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.633018" elapsed="0.000476"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:23.632978" elapsed="0.000588"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.634074" elapsed="0.000065"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.634397" elapsed="0.000103"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.634785" elapsed="0.000066"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:23.632944" elapsed="0.001987"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.632803" elapsed="0.002191"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.635142" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.635378" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:48:23.635523" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:48:23.486051" elapsed="0.149500"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.638401" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.637568" elapsed="0.000964">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.638691" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.636374" elapsed="0.002361"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.639337" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.638895" elapsed="0.000619"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.641105" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.640264" elapsed="0.000924"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.639545" elapsed="0.001763"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.638874" elapsed="0.002460"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.644283" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.641489" elapsed="0.002837"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:23.644477" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:48:23.644643" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:23.636025" elapsed="0.008658"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.647046" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.646530" elapsed="0.000626">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.647280" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.645357" elapsed="0.001976"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:48:23.647836" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.647541" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.647516" elapsed="0.000481"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.648141" elapsed="0.000024"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.648395" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.648565" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:48:23.650970" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:23.645036" elapsed="0.005961"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.653082" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.652621" elapsed="0.000627"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.653977" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.653498" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:23.677865" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:23.679149" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01uigvfp6hlyvo1c0242tbuq0p21.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:48:23 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:48:23.679890" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:23.656480" elapsed="0.023590"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.654266" elapsed="0.026095"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.680912" elapsed="0.000103"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.680428" elapsed="0.000872"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.654244" elapsed="0.027110"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.690943" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.685794" elapsed="0.005399"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.684342" elapsed="0.006897"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.684225" elapsed="0.007077"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.694180" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.692003" elapsed="0.002264"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.691451" elapsed="0.002861"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.691400" elapsed="0.002971"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.695735" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.695005" elapsed="0.000827"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.696530" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.695982" elapsed="0.000663"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.697426" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.697024" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.696718" elapsed="0.000824"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.695931" elapsed="0.001666"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.698826" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.698115" elapsed="0.000810"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.699621" elapsed="0.000143"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.699076" elapsed="0.000737"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.700556" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.700169" elapsed="0.000437"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.699869" elapsed="0.000781"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.699024" elapsed="0.001697"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:23.701597" elapsed="0.000637"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:23.703608" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.703082" elapsed="0.000713"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.704616" elapsed="0.002304"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:23.682459" elapsed="0.024561"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.707371" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:23.707188" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.707167" elapsed="0.000342"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:23.714140" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:23.707652" elapsed="0.006534"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:23.714333" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:48:23.714502" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:23.651405" elapsed="0.063124"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:23.714592" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:23.714758" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:48:23.465759" elapsed="0.249025"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.715106" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.714868" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.714851" elapsed="0.000391"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:23.715275" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:48:23.461869" elapsed="0.253529"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.457965" elapsed="0.257477"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.457947" elapsed="0.257519"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:48:23.716123" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.716019" elapsed="0.000163"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.716241" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:23.716205" elapsed="0.000075"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.716001" elapsed="0.000301"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.716440" elapsed="0.000021"/>
</kw>
<msg time="2026-04-25T23:48:23.716559" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:48:23.715797" elapsed="0.000787"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.717140" level="INFO">${cluster_index} = 1</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.716758" elapsed="0.000415"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.717870" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.717359" elapsed="0.000540"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.723041" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.722785" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.723482" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.723234" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:23.735993" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:23.736075" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:48:23 GMT', 'Expires': 'Sat, 25 Apr 2026 22:48:23 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Leader","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.614","FollowerInitialSyncStatus":false,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.160","active":true,"matchIndex":-1,"voting":true,"id":"member-2-shard-car-config","nextIndex":0},{"timeSinceLastActivity":"00:00:00.160","active":true,"matchIndex":-1,"voting":true,"id":"member-3-shard-car-config","nextIndex":0}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.672 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-2-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-1-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160903,"status":200} 
 </msg>
<msg time="2026-04-25T23:48:23.736220" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:23.725530" elapsed="0.010726"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.723595" elapsed="0.012720"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.736571" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.736350" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.723576" elapsed="0.013140"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.741845" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Leader","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.614","FollowerInitialSyncStatus":false,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.160","active":true,"matchIndex":-1,"voting":true,"id":"member-2-shard-car-config","nextIndex":0},{"timeSinceLastActivity":"00:00:00.160","active":true,"matchIndex":-1,"voting":true,"id":"member-3-shard-car-config","nextIndex":0}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.672 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-2-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-1-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160903,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.738300" elapsed="0.003744"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.738002" elapsed="0.004180"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.737976" elapsed="0.004245"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.745928" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.742603" elapsed="0.003507"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.742301" elapsed="0.003950"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.742277" elapsed="0.004019"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.747245" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.746518" elapsed="0.000771"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.747726" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.747388" elapsed="0.000534"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.748916" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.748177" elapsed="0.000796"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.747960" elapsed="0.001166"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.747362" elapsed="0.001798"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.750148" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.749374" elapsed="0.000812"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.750602" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.750288" elapsed="0.000531"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.751923" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.751080" elapsed="0.000900"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.750857" elapsed="0.001274"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.750261" elapsed="0.001904"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:23.752366" elapsed="0.000931"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:23.754034" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.753457" elapsed="0.000604"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.754207" elapsed="0.002530"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:23.737389" elapsed="0.019413"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.756986" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:23.756872" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.756853" elapsed="0.000200"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:23.760076" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160903,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:23.757191" elapsed="0.002914"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:23.760157" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:23.760313" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160903,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:23.718724" elapsed="0.041646"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:23.760430" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:23.760592" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160903,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:48:23.718109" elapsed="0.042509"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.761603" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160903, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.761162" elapsed="0.000469"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:48:23.761756" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:23.761933" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160903, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:48:23.760863" elapsed="0.001097"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:23.762311" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': -1, 'CommittedTransactionsCount': 0, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [{'active': True, 'i...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.762109" elapsed="0.000229"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:23.762700" level="INFO">${raft_property} = Leader</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.762484" elapsed="0.000242"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:48:23.762773" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:23.762924" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:23.456434" elapsed="0.306514"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:48:23.763006" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:48:23.763152" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:23.455775" elapsed="0.307401"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.763466" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.763256" 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="PASS" start="2026-04-25T23:48:23.763765" elapsed="0.000194"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.763545" elapsed="0.000451"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.764158" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.764020" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.763238" elapsed="0.000992"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:23.455593" elapsed="0.308663"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.766546" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.766241" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:23.766618" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:23.766784" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:23.765939" elapsed="0.000869"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.813394" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.813007" elapsed="0.000415"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.814212" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.813946" elapsed="0.000385">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.814428" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.813597" elapsed="0.000855"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.815045" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.814632" elapsed="0.000440"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.815394" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:23.815610" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:23.815247" elapsed="0.000389"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.816091" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.815836" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.817083" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.816829" elapsed="0.000299"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.817547" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:23.817279" elapsed="0.000294"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.817928" elapsed="0.000021"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.818126" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.818292" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:48:23.817799" elapsed="0.000550"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.817623" elapsed="0.000755"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:23.818423" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:23.818582" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:23.816545" elapsed="0.002062"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.816245" elapsed="0.002394"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.818821" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.818663" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.816223" elapsed="0.002674"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.819499" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:23.819056" elapsed="0.000470"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:23.819593" elapsed="0.000030"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:23.812184" elapsed="0.007659"/>
</kw>
<msg time="2026-04-25T23:48:23.819913" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:23.799817" elapsed="0.020163"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.859978" elapsed="0.000032"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.900412" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.940810" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.941145" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.941389" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.942161" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.941793" elapsed="0.000491"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:23.941752" elapsed="0.000598"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.942616" elapsed="0.000351"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.943225" elapsed="0.000064"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.943538" elapsed="0.000064"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:23.941719" elapsed="0.001973"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.941566" elapsed="0.002188"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.943918" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.944121" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:48:23.944257" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:48:23.795523" elapsed="0.148760"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.946626" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.946110" elapsed="0.000823">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.947058" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.945032" elapsed="0.002064"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.947683" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:23.947249" elapsed="0.000596"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.949352" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:23.948550" elapsed="0.000882"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.947872" elapsed="0.001677"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.947229" elapsed="0.002345"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.952313" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:23.949929" elapsed="0.002424"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:23.952496" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:23.952655" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:23.944699" elapsed="0.007995"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:23.955121" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:23.954610" elapsed="0.000620">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:23.955391" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:23.953348" elapsed="0.002082"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:48:23.955872" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-25T23:48:23.955586" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.955566" elapsed="0.000478"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.956187" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:23.956434" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:48:23.956590" elapsed="0.000017"/>
</return>
<msg time="2026-04-25T23:48:23.960315" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:23.953034" elapsed="0.007309"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.962457" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.962003" elapsed="0.000584"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:23.963258" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:23.962818" elapsed="0.000569"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:24.008928" level="INFO">GET Request : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:24.010243" level="INFO">GET Response : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node0t6y88dvlt0mdx3y841m6f8181.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:48:23 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:48:24.010998" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:23.965783" elapsed="0.045419"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.963520" elapsed="0.048025"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.012172" elapsed="0.000114"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.011624" elapsed="0.000976"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.963499" elapsed="0.049167"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.020295" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.017247" elapsed="0.003297"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.015879" elapsed="0.004712"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.015756" elapsed="0.004896"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.023644" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.021415" elapsed="0.002335"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.020835" elapsed="0.002962"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.020784" elapsed="0.003073"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.025123" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.024364" elapsed="0.000859"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.026138" elapsed="0.000080"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.025379" elapsed="0.000889"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.027105" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.026654" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.026331" elapsed="0.000876"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.025325" elapsed="0.001944"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.028524" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.027801" elapsed="0.000927"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.029456" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.028894" elapsed="0.000676"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.030395" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.029997" elapsed="0.000449"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.029629" elapsed="0.000862"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.028840" elapsed="0.001707"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.031447" elapsed="0.000643"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:24.033511" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.032980" elapsed="0.000815"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.034623" elapsed="0.002292"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:24.013915" elapsed="0.023101"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.037365" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.037184" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.037163" elapsed="0.000342"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:24.043927" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:24.037648" elapsed="0.006324"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:24.044118" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T23:48:24.044300" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:23.960772" elapsed="0.083555"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.044405" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:24.044558" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:48:23.774794" elapsed="0.269791"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.044949" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.044702" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.044683" elapsed="0.000406"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.045123" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:48:23.770842" elapsed="0.274406"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:23.766875" elapsed="0.278417"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:23.766858" elapsed="0.278458"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:48:24.045977" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:48:24.045872" elapsed="0.000164"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.046097" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.046060" elapsed="0.000076"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.045855" elapsed="0.000304"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.046301" elapsed="0.000021"/>
</kw>
<msg time="2026-04-25T23:48:24.046420" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:48:24.045543" elapsed="0.000902"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.047008" level="INFO">${cluster_index} = 2</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.046606" elapsed="0.000428"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.047640" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.047181" elapsed="0.000500"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.052806" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.052532" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.053240" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.052997" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:24.069483" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:24.069572" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:48:24 GMT', 'Expires': 'Sat, 25 Apr 2026 22:48:24 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Follower","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.625","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.870 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160904,"status":200} 
 </msg>
<msg time="2026-04-25T23:48:24.069744" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:24.055233" elapsed="0.014550"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.053347" elapsed="0.016496"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.070080" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.069878" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.053329" elapsed="0.016873"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.077005" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Follower","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.625","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.870 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160904,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.071648" elapsed="0.005846"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.071356" elapsed="0.006406"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.071332" elapsed="0.006499"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.083631" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.078457" elapsed="0.005551"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.077962" elapsed="0.006265"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.077924" elapsed="0.006363"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.085001" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.084448" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.085326" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.085098" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.086159" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.085645" elapsed="0.000555"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.085490" elapsed="0.000820"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.085081" elapsed="0.001254"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.086994" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.086488" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.087315" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.087090" elapsed="0.000362"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.088147" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.087632" elapsed="0.000555"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.087479" elapsed="0.000815"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.087073" elapsed="0.001246"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.088464" elapsed="0.000651"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:24.089836" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.089272" elapsed="0.000590"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.090010" elapsed="0.002533"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:24.070830" elapsed="0.021778"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.092826" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.092717" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.092658" elapsed="0.000236"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:24.095634" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:24.093031" elapsed="0.002659"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:24.095744" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:24.095904" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:24.048499" elapsed="0.047430"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.095986" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:24.096133" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:48:24.047888" elapsed="0.048270"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.097206" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160904, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.096664" elapsed="0.000570"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:48:24.097319" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:24.097495" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160904, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:48:24.096380" elapsed="0.001141"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:24.097896" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': -1, 'CommittedTransactionsCount': 0, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerInitial...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.097693" elapsed="0.000230"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:24.098270" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.098070" elapsed="0.000226"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:48:24.098342" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:24.098491" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:23.765334" elapsed="0.333181"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:48:24.098573" elapsed="0.000024"/>
</return>
<msg time="2026-04-25T23:48:24.098734" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:23.764610" elapsed="0.334150"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.099048" elapsed="0.000191"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.098839" elapsed="0.000438"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.099439" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.099301" 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-25T23:48:24.099697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.099516" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.098822" elapsed="0.000952"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:23.764426" elapsed="0.335373"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.102021" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.101719" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:24.102091" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:24.102238" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:24.101415" elapsed="0.000847"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.148724" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.148320" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:24.149516" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:24.149260" elapsed="0.000334">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:24.149703" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:24.148930" elapsed="0.000799"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.150304" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:24.149910" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:24.150651" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:48:24.150834" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:48:24.150504" elapsed="0.000390"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.151344" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.151067" elapsed="0.000331"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.152318" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.152062" elapsed="0.000300"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.152808" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.152515" elapsed="0.000320"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.153150" elapsed="0.000021"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.153354" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.153521" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:48:24.153023" elapsed="0.000555"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.152885" elapsed="0.000723"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:48:24.153652" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:48:24.153827" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:48:24.151794" elapsed="0.002058"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.151485" elapsed="0.002399"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.154046" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.153908" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.151465" elapsed="0.002657"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.154755" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.154280" elapsed="0.000504"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.154852" elapsed="0.000031"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:24.147496" elapsed="0.007581"/>
</kw>
<msg time="2026-04-25T23:48:24.155148" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.135177" elapsed="0.020037"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.195248" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.235239" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.275867" elapsed="0.000031"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.276199" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.276441" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.277231" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.276877" elapsed="0.000479"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:48:24.276838" elapsed="0.000586"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.277711" elapsed="0.000067"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.278032" elapsed="0.000065"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.278348" elapsed="0.000065"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:48:24.276807" elapsed="0.001683"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.276655" elapsed="0.001896"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.278912" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.279120" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:48:24.279247" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:48:24.130710" elapsed="0.148563"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:24.281579" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:24.281056" elapsed="0.000655">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:24.281839" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:24.280011" elapsed="0.001867"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.282461" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.282035" elapsed="0.000590"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.284445" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.283657" elapsed="0.000866"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.282652" elapsed="0.001987"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.282015" elapsed="0.002649"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.287342" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:24.284850" elapsed="0.002532"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:48:24.287524" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:48:24.287698" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:24.279691" elapsed="0.008033"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:48:24.290059" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:48:24.289537" elapsed="0.000630">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:48:24.290292" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:48:24.288483" elapsed="0.001847"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:48:24.290887" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:48:24.290486" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.290466" elapsed="0.000585"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.291196" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.291442" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.291638" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:48:24.293903" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:48:24.288167" elapsed="0.005763"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.296174" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.295716" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.297009" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.296518" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:24.335506" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:24.336406" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01bbvnf6uh9ywcy8k6kezl0pj81.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:48:24 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:48:24.336825" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:24.299526" elapsed="0.037413"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.297273" elapsed="0.039841"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.337439" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.337156" elapsed="0.000548"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.297253" elapsed="0.040488"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.344800" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.340534" elapsed="0.004552"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.339705" elapsed="0.005433"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.339594" elapsed="0.005615"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.348615" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.346026" elapsed="0.002804"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.345377" elapsed="0.003507"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.345321" elapsed="0.003627"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.350384" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.349563" elapsed="0.000931"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.351239" elapsed="0.000073"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.350659" elapsed="0.000701"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.352163" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.351740" elapsed="0.000474"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.351417" elapsed="0.000845"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.350606" elapsed="0.001713"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.353510" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.352827" elapsed="0.000784"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.354376" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.353830" elapsed="0.000658"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.355255" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.354863" elapsed="0.000444"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.354546" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.353778" elapsed="0.001627"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.356309" elapsed="0.000628"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:24.358317" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.357793" elapsed="0.000628"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.359426" elapsed="0.002414"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:24.338378" elapsed="0.023563"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.362290" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.362108" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.362088" elapsed="0.000340"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:24.368577" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:24.362570" elapsed="0.006052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:24.368868" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:48:24.369043" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:24.294349" elapsed="0.074721"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.369134" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:24.369288" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:48:24.110192" elapsed="0.259122"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.369638" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.369398" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.369381" elapsed="0.000416"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.369830" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:48:24.106246" elapsed="0.263710"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.102333" elapsed="0.267667"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.102316" elapsed="0.267708"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:48:24.370583" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:24.370477" elapsed="0.000166"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.370724" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.370683" elapsed="0.000082"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.370460" elapsed="0.000328"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.370929" elapsed="0.000021"/>
</kw>
<msg time="2026-04-25T23:48:24.371050" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:48:24.370252" elapsed="0.000823"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.371623" level="INFO">${cluster_index} = 3</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.371233" elapsed="0.000417"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.372300" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.371830" elapsed="0.000497"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.377467" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.377219" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.377918" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.377658" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:24.393925" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:24.394053" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:48:24 GMT', 'Expires': 'Sat, 25 Apr 2026 22:48:24 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Follower","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.624","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.674 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160904,"status":200} 
 </msg>
<msg time="2026-04-25T23:48:24.394362" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:24.379947" elapsed="0.014475"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.378027" elapsed="0.016490"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.394934" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.394572" elapsed="0.000507"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.378009" elapsed="0.017118"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.402087" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":-1,"InMemoryJournalLogSize":0,"ReplicatedToAllIndex":-1,"Leader":"member-1-shard-car-config","LastIndex":-1,"RaftState":"Follower","LastApplied":-1,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":-1,"LastLeadershipChangeTime":"2026-04-25 23:43:01.624","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.674 ms","CurrentTerm":5,"LastTerm":-1,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":-1,"StatRetrievalError":null,"CommitIndex":-1,"SnapshotTerm":-1,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":0},"timestamp":1777160904,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.397497" elapsed="0.004833"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.397031" elapsed="0.005438"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.396992" elapsed="0.005518"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.406130" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.402921" elapsed="0.003393"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.402589" elapsed="0.003862"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.402566" elapsed="0.003924"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.407443" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.406728" elapsed="0.000754"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.407933" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.407580" elapsed="0.000545"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.409137" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.408381" elapsed="0.000813"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.408164" elapsed="0.001179"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.407555" elapsed="0.001823"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.410304" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.409593" elapsed="0.000749"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.410775" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.410439" elapsed="0.000557"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.411782" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.411266" elapsed="0.000557"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.411037" elapsed="0.000894"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.410414" elapsed="0.001542"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.412103" elapsed="0.000645"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:48:24.413435" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.412906" elapsed="0.000556"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.413608" elapsed="0.002532"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:48:24.396166" elapsed="0.020038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.416379" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.416273" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.416255" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:48:24.419173" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:48:24.416581" elapsed="0.002622"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:48:24.419254" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:48:24.419416" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:48:24.373164" elapsed="0.046278"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:48:24.419498" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:24.419644" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777160904,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:48:24.372534" elapsed="0.047151"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.420620" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160904, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:24.420184" elapsed="0.000464"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:48:24.420748" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:24.420925" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777160904, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:48:24.419901" elapsed="0.001051"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:24.421302" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': -1, 'CommittedTransactionsCount': 0, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerInitial...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.421102" elapsed="0.000228"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:24.421757" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.421477" elapsed="0.000308"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:48:24.421832" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:24.421986" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:24.100862" elapsed="0.321149"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:48:24.422070" elapsed="0.000024"/>
</return>
<msg time="2026-04-25T23:48:24.422216" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:48:24.100133" elapsed="0.322108"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.422531" elapsed="0.000208"/>
</kw>
<status status="PASS" start="2026-04-25T23:48:24.422324" elapsed="0.000453"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.422965" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.422826" 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-25T23:48:24.423177" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.423043" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.422307" elapsed="0.000943"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:24.099969" elapsed="0.323306"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:23.455385" elapsed="0.967924"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T23:48:24.423353" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:48:24.423554" level="INFO">${leader_list} = [1]</msg>
<msg time="2026-04-25T23:48:24.423601" level="INFO">${follower_list} = [2, 3]</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-25T23:48:23.451386" elapsed="0.972238"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.424081" level="INFO">Length is 1.</msg>
<msg time="2026-04-25T23:48:24.424157" level="INFO">${leader_count} = 1</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-25T23:48:24.423811" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.424459" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.424248" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.424230" elapsed="0.000305"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.426445" level="INFO">Length is 1.</msg>
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="PASS" start="2026-04-25T23:48:24.424663" elapsed="0.001829"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:48:24.426857" level="INFO">${leader} = 1</msg>
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.426644" elapsed="0.000240"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T23:48:24.426930" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:48:24.427139" level="INFO">${leader} = 1</msg>
<msg time="2026-04-25T23:48:24.427187" level="INFO">${follower_list} = [2, 3]</msg>
<var>${leader}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="PASS" start="2026-04-25T23:48:23.447297" elapsed="0.979913"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.427848" level="INFO">${car_leader_index} = 1</msg>
<arg>\${${shard_name}_leader_index}</arg>
<arg>${leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.427375" elapsed="0.000543"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.428478" level="INFO">${car_follower_indices} = [2, 3]</msg>
<arg>\${${shard_name}_follower_indices}</arg>
<arg>${follower_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.428108" elapsed="0.000447"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:48:24.428919" level="INFO">${first_follower_index} = 2</msg>
<var>${first_follower_index}</var>
<arg>${follower_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.428720" elapsed="0.000224"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.429474" level="INFO">${car_first_follower_index} = 2</msg>
<arg>\${${shard_name}_first_follower_index}</arg>
<arg>${first_follower_index}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.429102" elapsed="0.000414"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.430328" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.430028" elapsed="0.000326"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:24.430399" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:24.430549" level="INFO">${leader_session} = ClusterManagement__session_1</msg>
<var>${leader_session}</var>
<arg>member_index=${leader}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:24.429740" elapsed="0.000833"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.431125" level="INFO">${car_leader_session} = ClusterManagement__session_1</msg>
<arg>\${${shard_name}_leader_session}</arg>
<arg>${leader_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.430754" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.431730" level="INFO">${sessions} = []</msg>
<var>${sessions}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:24.431310" elapsed="0.000447"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.432748" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.432438" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:24.432820" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:48:24.432969" level="INFO">${follower_session} = ClusterManagement__session_2</msg>
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:24.432143" elapsed="0.000851"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.433135" elapsed="0.000186"/>
</kw>
<var name="${follower_index}">2</var>
<status status="PASS" start="2026-04-25T23:48:24.431960" elapsed="0.001399"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.434227" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:48:24.433932" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:48:24.434299" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:48:24.434448" level="INFO">${follower_session} = ClusterManagement__session_3</msg>
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:24.433628" elapsed="0.000845"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.434615" elapsed="0.000243"/>
</kw>
<var name="${follower_index}">3</var>
<status status="PASS" start="2026-04-25T23:48:24.433449" elapsed="0.001447"/>
</iter>
<var>${follower_index}</var>
<value>@{follower_list}</value>
<status status="PASS" start="2026-04-25T23:48:24.431811" elapsed="0.003114"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.435443" level="INFO">${car_follower_sessions} = ['ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${${shard_name}_follower_sessions}</arg>
<arg>${sessions}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.435074" elapsed="0.000410"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:48:24.435828" level="INFO">${first_follower_session} = ClusterManagement__session_2</msg>
<var>${first_follower_session}</var>
<arg>${sessions}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.435629" elapsed="0.000225"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.436375" level="INFO">${car_first_follower_session} = ClusterManagement__session_2</msg>
<arg>\${${shard_name}_first_follower_session}</arg>
<arg>${first_follower_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.436006" elapsed="0.000410"/>
</kw>
<arg>shard_name=car</arg>
<doc>Get leader and followers for given shard name and
set several suite variables related to member indices and sessions.
ClusterManagement Resource is assumed to be initialized.
TODO: car-people shard name causes dash in variable names. Should we convert to underscores?</doc>
<status status="PASS" start="2026-04-25T23:48:23.446907" elapsed="0.989569"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:24.438593" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:24.438472" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.438454" elapsed="0.000229"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:24.439039" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.438825" elapsed="0.000239"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:24.439390" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:24.439213" elapsed="0.000202"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:24.458983" level="INFO">log:set INFO</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:24.439953" elapsed="0.019088"/>
</kw>
<msg time="2026-04-25T23:48:24.459145" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:24.459189" level="INFO">${message_write} = log:set INFO
</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:24.439602" elapsed="0.019610"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:24.469818" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:24.459737" elapsed="0.010143"/>
</kw>
<msg time="2026-04-25T23:48:24.469980" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:24.470024" level="INFO">${message_wait} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:24.459378" elapsed="0.010671"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.470363" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.470125" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.470106" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.470857" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:24.470574" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:24.471209" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:24.470972" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:24.470954" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:24.471320" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:48:24.472459" 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-25T23:48:24.472941" elapsed="0.000165"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:48:24.473249" elapsed="0.000100"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:24.472113" elapsed="0.001288"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:24.471577" elapsed="0.001868"/>
</kw>
<arg>log:set ${CONTROLLER_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:24.436834" elapsed="0.036706"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:24.474042" level="INFO">${mininet_conn_id} = 20</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:48:24.473701" elapsed="0.000367"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.474571" level="INFO">${mininet_conn_id} = 20</msg>
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:48:24.474254" elapsed="0.000358"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:48:24.476445" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:48:24.476521" 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-25T23:48:24.476183" elapsed="0.000362"/>
</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-25T23:48:24.476712" elapsed="0.000323"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:48:24.477885" level="INFO">Logging into '10.30.171.32:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:48:25.157046" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:48:24 UTC 2026

  System load:  0.17               Processes:             105
  Usage of /:   19.6% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.32
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

9 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</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="PASS" start="2026-04-25T23:48:24.477548" elapsed="0.679648"/>
</kw>
<msg time="2026-04-25T23:48:25.157277" 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="PASS" start="2026-04-25T23:48:24.477196" elapsed="0.680288"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:48:24.475754" elapsed="0.681847"/>
</kw>
<msg time="2026-04-25T23:48:25.157654" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:48:24.475175" elapsed="0.682549"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-25T23:48:24.474822" elapsed="0.682980"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.164811" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-25T23:48:25.173233" level="INFO">'/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py' -&gt; '/home/jenkins//cluster_rest_script.py'</msg>
<arg>/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:48:25.158028" elapsed="0.015297"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.173863" level="INFO">Executing command 'ls'.</msg>
<msg time="2026-04-25T23:48:25.186161" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:48:25.186439" level="INFO">${stdout} = cluster_rest_script.py
lf-env.sh</msg>
<msg time="2026-04-25T23:48:25.186540" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:48:25.186630" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:48:25.173571" elapsed="0.013152"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:25.187750" level="INFO">Creating Session using : alias=session, url=http://10.30.171.37:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a10225910&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>session</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:48:25.187130" elapsed="0.000983"/>
</kw>
<doc>Suite setup keyword</doc>
<status status="PASS" start="2026-04-25T23:48:18.171899" elapsed="7.016360"/>
</kw>
<test id="s1-s2-t1" name="Add Cars" line="57">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:48:25.196110" elapsed="0.000513"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:48:25.195479" elapsed="0.001303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.199200" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.198907" elapsed="0.000404"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.198859" elapsed="0.000502"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.205081" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.204974" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.204956" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.206159" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:25.205761" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.206645" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:25.206339" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:25.206731" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:48:25.206888" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:25.205375" elapsed="0.001538"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.212130" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.212021" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.212003" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.213411" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.213279" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.213258" elapsed="0.000226"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:25.213949" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:25.213623" elapsed="0.000353"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.214348" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.214128" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.272001" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:25.214965" elapsed="0.057148"/>
</kw>
<msg time="2026-04-25T23:48:25.272283" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:25.272331" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.214611" elapsed="0.057757"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.319525" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:25.273070" elapsed="0.046728"/>
</kw>
<msg time="2026-04-25T23:48:25.319961" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:25.320007" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.272539" elapsed="0.047506"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.320353" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.320127" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.320106" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.320912" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.320569" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.321257" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.321049" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.321032" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:25.321368" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.323993" elapsed="0.000149"/>
</kw>
<msg time="2026-04-25T23:48:25.324202" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:25.322861" elapsed="0.001470"/>
</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="NOT RUN" start="2026-04-25T23:48:25.324597" elapsed="0.000090"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.324937" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:25.322206" elapsed="0.002912"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:25.321651" elapsed="0.003531"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:25.212969" elapsed="0.112313"/>
</kw>
<msg time="2026-04-25T23:48:25.325378" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.325422" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.212343" elapsed="0.113116"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:25.325640" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:25.325534" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.325516" elapsed="0.000231"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.326134" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.326459" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.326530" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:25.211678" elapsed="0.114956"/>
</kw>
<msg time="2026-04-25T23:48:25.326788" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.326833" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.207285" elapsed="0.119584"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.327194" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.326945" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.326927" elapsed="0.000349"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:25.207148" elapsed="0.120152"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.332419" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.332312" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.332293" elapsed="0.000193"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.333600" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.333494" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.333477" elapsed="0.000288"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:25.334203" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:25.333908" elapsed="0.000322"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.334616" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.334378" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.391132" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:25.335146" elapsed="0.056107"/>
</kw>
<msg time="2026-04-25T23:48:25.391435" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:25.391502" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.334810" elapsed="0.056729"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.434739" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:25.392098" elapsed="0.042753"/>
</kw>
<msg time="2026-04-25T23:48:25.435017" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:25.435063" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.391737" elapsed="0.043363"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.435423" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.435187" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.435162" elapsed="0.000343"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.435979" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.435639" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.436324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.436114" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.436096" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:25.436437" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.439023" elapsed="0.000147"/>
</kw>
<msg time="2026-04-25T23:48:25.439231" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:25.437940" elapsed="0.001422"/>
</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="NOT RUN" start="2026-04-25T23:48:25.439627" elapsed="0.000097"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.439978" elapsed="0.000117"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:25.437284" elapsed="0.002923"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:25.436741" elapsed="0.003530"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:25.333196" elapsed="0.107174"/>
</kw>
<msg time="2026-04-25T23:48:25.440463" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.440507" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.332628" elapsed="0.107916"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:25.440745" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:25.440619" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.440601" elapsed="0.000227"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.441215" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.441543" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.441615" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:25.331971" elapsed="0.109765"/>
</kw>
<msg time="2026-04-25T23:48:25.441852" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.441897" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.327561" elapsed="0.114373"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.442250" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.442008" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.441991" elapsed="0.000335"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:25.327427" elapsed="0.114922"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.447470" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.447363" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.447343" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.448687" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:25.448562" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.448545" elapsed="0.000213"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:25.449191" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:25.448895" elapsed="0.000322"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.449578" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.449366" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.506885" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:25.450119" elapsed="0.056879"/>
</kw>
<msg time="2026-04-25T23:48:25.507178" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:25.507224" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.449791" elapsed="0.057469"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.550839" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:25.507799" elapsed="0.043147"/>
</kw>
<msg time="2026-04-25T23:48:25.551107" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:25.551152" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.507428" elapsed="0.043760"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.551542" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.551319" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.551297" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.552081" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.551779" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.552651" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.552421" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.552197" elapsed="0.000557"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:25.552790" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:25.555237" elapsed="0.000143"/>
</kw>
<msg time="2026-04-25T23:48:25.555441" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:25.554240" elapsed="0.001332"/>
</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="NOT RUN" start="2026-04-25T23:48:25.555927" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.556254" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:25.553605" elapsed="0.002830"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:25.553065" elapsed="0.003463"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:25.448258" elapsed="0.108550"/>
</kw>
<msg time="2026-04-25T23:48:25.556901" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.556945" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.447702" elapsed="0.109280"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:25.557166" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:48:25.557058" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.557039" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.557634" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.557982" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:25.558054" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:25.447018" elapsed="0.111142"/>
</kw>
<msg time="2026-04-25T23:48:25.558254" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:25.558298" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.442608" elapsed="0.115726"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:25.558649" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:25.558407" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:25.558391" elapsed="0.000350"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:25.442475" elapsed="0.116290"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:25.206970" elapsed="0.351826"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:48:25.204592" elapsed="0.354262"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:48:25.198138" elapsed="0.360772"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:25.197134" elapsed="0.361822"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:48:25.190095" elapsed="0.368951"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:25.559914" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:25.559625" elapsed="0.000315"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:48:25.559988" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:48:25.560140" level="INFO">${car_leader_ip} = 10.30.171.37</msg>
<var>${car_leader_ip}</var>
<arg>member_index=${car_leader_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:48:25.559273" elapsed="0.000892"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.568734" level="INFO">python cluster_rest_script.py --port 8181 add --itemtype car --itemcount 10000 --ipr 10000</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.568455" elapsed="0.000326"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:25.572164" level="INFO">python cluster_rest_script.py --port 8181 add --itemtype car --itemcount 10000 --ipr 10000 --host 10.30.171.37</msg>
<msg time="2026-04-25T23:48:25.572257" level="INFO">${output} =  python cluster_rest_script.py --port 8181 add --itemtype car --itemcount 10000 --ipr 10000 --host 10.30.171.37 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:25.568928" elapsed="0.003355"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:25.572743" level="INFO"> python cluster_rest_script.py --port 8181 add --itemtype car --itemcount 10000 --ipr 10000 --host 10.30.171.37 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:25.572474" elapsed="0.000315"/>
</kw>
<arg>${addcarcmd}</arg>
<arg>--host ${car_leader_ip} ${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:48:25.568020" elapsed="0.004825"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.613876" level="INFO">[?2004l2026-04-25 23:48:25,668 INFO: Add 10000 car(s) to 10.30.171.37:8181 (10000 per request)
2026-04-25 23:48:27,583 INFO: Response code(s) got per number of requests: {201: 1}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:48:25.577359" elapsed="2.036676"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:48:25.576882" elapsed="2.037233"/>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit.</doc>
<status status="PASS" start="2026-04-25T23:48:25.576531" elapsed="2.037671"/>
</kw>
<doc>Request to add 10000 cars (timeout in 5m).</doc>
<status status="PASS" start="2026-04-25T23:48:25.188564" elapsed="2.425822"/>
</test>
<test id="s1-s2-t2" name="Verify Cars" 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-25T23:48:27.618232" elapsed="0.000260"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:48:27.617964" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.619628" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.619477" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.619452" elapsed="0.000273"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.624375" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.624268" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.624250" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.625451" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:27.625052" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.625957" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:27.625632" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:27.626028" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:48:27.626189" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:27.624663" elapsed="0.001551"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.631455" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.631335" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.631316" elapsed="0.000208"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.632719" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.632588" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.632571" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.633230" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.632926" elapsed="0.000391"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.633718" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.633475" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.688645" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:27.634227" elapsed="0.054535"/>
</kw>
<msg time="2026-04-25T23:48:27.688928" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:27.688975" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.633899" elapsed="0.055131"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.740932" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:27.689549" elapsed="0.051499"/>
</kw>
<msg time="2026-04-25T23:48:27.741215" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:27.741262" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.689202" elapsed="0.052097"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.741612" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.741381" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.741359" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.742163" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.741853" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.742527" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.742302" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.742284" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:27.742638" elapsed="0.000058"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.745226" elapsed="0.000171"/>
</kw>
<msg time="2026-04-25T23:48:27.745470" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:27.744146" elapsed="0.001480"/>
</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="NOT RUN" start="2026-04-25T23:48:27.745918" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.746242" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.743513" elapsed="0.002912"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:27.742950" elapsed="0.003554"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:27.632286" elapsed="0.114318"/>
</kw>
<msg time="2026-04-25T23:48:27.746726" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:27.746772" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.631689" elapsed="0.115122"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:27.746997" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.746888" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.746869" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.747475" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.747825" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.747942" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:27.630997" elapsed="0.117057"/>
</kw>
<msg time="2026-04-25T23:48:27.748149" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:27.748194" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.626583" elapsed="0.121648"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.748549" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.748305" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.748288" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:27.626446" elapsed="0.122202"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.753961" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.753851" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.753831" elapsed="0.000202"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.755321" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.755213" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.755195" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.755861" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.755531" elapsed="0.000358"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.756261" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.756043" elapsed="0.000244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.833777" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:27.756781" elapsed="0.077180"/>
</kw>
<msg time="2026-04-25T23:48:27.834175" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:27.834224" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.756440" elapsed="0.077821"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.873241" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:27.834908" elapsed="0.038746"/>
</kw>
<msg time="2026-04-25T23:48:27.874130" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:27.874236" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.834481" elapsed="0.039838"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.875140" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.874530" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.874474" elapsed="0.000846"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.876388" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.875615" elapsed="0.000936"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.877198" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.876729" elapsed="0.000589"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.876658" elapsed="0.000731"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:27.877467" elapsed="0.000074"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.882823" elapsed="0.000155"/>
</kw>
<msg time="2026-04-25T23:48:27.883041" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:27.880802" elapsed="0.002448"/>
</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="NOT RUN" start="2026-04-25T23:48:27.883527" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.883880" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.879364" elapsed="0.004702"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:27.878121" elapsed="0.006010"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:27.754905" elapsed="0.129328"/>
</kw>
<msg time="2026-04-25T23:48:27.884336" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:27.884381" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.754182" elapsed="0.130236"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:27.884612" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.884500" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.884479" elapsed="0.000252"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.885150" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.885503" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.885576" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:27.753475" elapsed="0.132230"/>
</kw>
<msg time="2026-04-25T23:48:27.885805" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:27.885850" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.748926" elapsed="0.136960"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.886209" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.885963" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.885946" elapsed="0.000339"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:27.748790" elapsed="0.137519"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.891650" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.891542" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.891523" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:27.892890" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:27.892783" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.892765" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:27.893431" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:27.893094" elapsed="0.000363"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.893848" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.893608" elapsed="0.000266"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.949128" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:27.894351" elapsed="0.055006"/>
</kw>
<msg time="2026-04-25T23:48:27.949602" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:27.949650" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.894025" elapsed="0.055689"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:27.992891" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:27.950409" elapsed="0.043011"/>
</kw>
<msg time="2026-04-25T23:48:27.993580" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:27.993627" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.949968" elapsed="0.043695"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.994036" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.993786" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.993755" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:27.994558" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:27.994254" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.994922" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:27.994713" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.994693" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:27.995035" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:27.997693" elapsed="0.000152"/>
</kw>
<msg time="2026-04-25T23:48:27.997908" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:27.996577" elapsed="0.001468"/>
</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="NOT RUN" start="2026-04-25T23:48:27.998311" elapsed="0.000079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.998641" elapsed="0.000094"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:27.995917" elapsed="0.002929"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:27.995346" elapsed="0.003565"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:27.892438" elapsed="0.106571"/>
</kw>
<msg time="2026-04-25T23:48:27.999100" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:27.999144" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.891878" elapsed="0.107303"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:27.999364" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:27.999257" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:27.999238" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:27.999864" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.000200" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:28.000272" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:27.891182" elapsed="0.109215"/>
</kw>
<msg time="2026-04-25T23:48:28.000492" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:28.000536" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.886585" elapsed="0.113987"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:28.000908" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:28.000645" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:28.000629" elapsed="0.000357"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:27.886448" elapsed="0.114561"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:27.626269" elapsed="0.374775"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:48:27.623906" elapsed="0.377200"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:48:27.619168" elapsed="0.382036"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:27.618715" elapsed="0.382539"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:48:27.615413" elapsed="0.385898"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:48:28.002396" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:48:28.002062" elapsed="0.000369"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:28.002597" elapsed="0.000307"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:48:28.001801" elapsed="0.001161"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.003868" level="INFO">handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:48:30.004314" level="INFO">${output} = 
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/hom...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:48:28.003113" elapsed="2.001283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.005592" level="INFO">
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 600, in add_car
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt; ^C[?2004l[?2004h[?2004l
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt; </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.004895" elapsed="0.000851"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:48:28.001470" elapsed="2.004454"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.020794" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:48:30.033915" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:48:30.034065" level="INFO">${output_log} = 2026-04-25 23:48:25,668 INFO: Add 10000 car(s) to 10.30.171.37:8181 (10000 per request)
2026-04-25 23:48:27,583 INFO: Response code(s) got per number of requests: {201: 1}</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:48:30.020528" elapsed="0.013573"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.034786" level="INFO">2026-04-25 23:48:25,668 INFO: Add 10000 car(s) to 10.30.171.37:8181 (10000 per request)
2026-04-25 23:48:27,583 INFO: Response code(s) got per number of requests: {201: 1}</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.034329" elapsed="0.000520"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:48:30.035630" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script_add_cars.log"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script_add_cars.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:48:30.035110" elapsed="0.000609"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>cluster_rest_script_add_cars.log</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:48:30.019770" elapsed="0.016035"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:48:30.318665" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:48:30.327078" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:48:30 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;&lt;car-entry&gt;&lt;id&gt;4248&lt;/id&gt;&lt;model&gt;model4248&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4134&lt;/id&gt;&lt;model&gt;model4134&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9409&lt;/id&gt;&lt;model&gt;model9409&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1673&lt;/id&gt;&lt;model&gt;model1673&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9691&lt;/id&gt;&lt;model&gt;model9691&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9794&lt;/id&gt;&lt;model&gt;model9794&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7651&lt;/id&gt;&lt;model&gt;model7651&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;344&lt;/id&gt;&lt;model&gt;model344&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3530&lt;/id&gt;&lt;model&gt;model3530&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;447&lt;/id&gt;&lt;model&gt;model447&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1163&lt;/id&gt;&lt;model&gt;model1163&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4440&lt;/id&gt;&lt;model&gt;model4440&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4239&lt;/id&gt;&lt;model&gt;model4239&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4147&lt;/id&gt;&lt;model&gt;model4147&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9418&lt;/id&gt;&lt;model&gt;model9418&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1660&lt;/id&gt;&lt;model&gt;model1660&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7664&lt;/id&gt;&lt;model&gt;model7664&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;357&lt;/id&gt;&lt;model&gt;model357&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3521&lt;/id&gt;&lt;model&gt;model3521&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1150&lt;/id&gt;&lt;model&gt;model1150&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4222&lt;/id&gt;&lt;model&gt;model4222&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5208&lt;/id&gt;&lt;model&gt;model5208&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2808&lt;/id&gt;&lt;model&gt;model2808&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1699&lt;/id&gt;&lt;model&gt;model1699&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7468&lt;/id&gt;&lt;model&gt;model7468&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3556&lt;/id&gt;&lt;model&gt;model3556&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3659&lt;/id&gt;&lt;model&gt;model3659&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1181&lt;/id&gt;&lt;model&gt;model1181&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4213&lt;/id&gt;&lt;model&gt;model4213&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5217&lt;/id&gt;&lt;model&gt;model5217&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1547&lt;/id&gt;&lt;model&gt;model1547&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1686&lt;/id&gt;&lt;model&gt;model1686&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7682&lt;/id&gt;&lt;model&gt;model7682&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2130&lt;/id&gt;&lt;model&gt;model2130&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;331&lt;/id&gt;&lt;model&gt;model331&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3547&lt;/id&gt;&lt;model&gt;model3547&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4300&lt;/id&gt;&lt;model&gt;model4300&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5331&lt;/id&gt;&lt;model&gt;model5331&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7591&lt;/id&gt;&lt;model&gt;model7591&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7302&lt;/id&gt;&lt;model&gt;model7302&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2041&lt;/id&gt;&lt;model&gt;model2041&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2236&lt;/id&gt;&lt;model&gt;model2236&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3827&lt;/id&gt;&lt;model&gt;model3827&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;482&lt;/id&gt;&lt;model&gt;model482&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3632&lt;/id&gt;&lt;model&gt;model3632&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4580&lt;/id&gt;&lt;model&gt;model4580&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;5340&lt;/id&gt;&lt;model&gt;model5340&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7315&lt;/id&gt;&lt;model&gt;model7315&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2054&lt;/id&gt;&lt;model&gt;model2054&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2249&lt;/id&gt;&lt;model&gt;model2249&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;495&lt;/id&gt;&lt;model&gt;model495&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3623&lt;/id&gt;&lt;model&gt;model3623&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4326&lt;/id&gt;&lt;model&gt;model4326&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4058&lt;/id&gt;&lt;model&gt;model4058&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1595&lt;/id&gt;&lt;model&gt;model1595&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;8186&lt;/id&gt;&lt;model&gt;model8186&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;7573&lt;/id&gt;&lt;model&gt;model7573&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;9427&lt;/id&gt;&lt;model&gt;model9427&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;2254&lt;/id&gt;&lt;model&gt;model2254&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3801&lt;/id&gt;&lt;model&gt;model3801&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;369&lt;/id&gt;&lt;model&gt;model369&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;3519&lt;/id&gt;&lt;model&gt;model3519&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;4317&lt;/id&gt;&lt;model&gt;model4317&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;1582&lt;/id&gt;&lt;model&gt;model1582&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manufacturer&gt;&lt;/car-entry&gt;&lt;car-entry&gt;&lt;id&gt;8199&lt;/id&gt;&lt;model&gt;model8199&lt;/model&gt;&lt;year&gt;2015&lt;/year&gt;&lt;category&gt;my_category&lt;/category&gt;&lt;manufacturer&gt;my_manufacturer&lt;/manu... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:48:30.327613" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:48:30.036017" elapsed="0.291637"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:48:30.500241" level="INFO">10000 elements matched 'car-entry'.</msg>
<msg time="2026-04-25T23:48:30.500463" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-entry</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:48:30.328004" elapsed="0.172488"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:48:30.500794" elapsed="0.000450"/>
</kw>
<doc>Store logs and verify result</doc>
<status status="PASS" start="2026-04-25T23:48:27.614831" elapsed="2.886541"/>
</test>
<test id="s1-s2-t3" name="Add People" 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-25T23:48:30.504791" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:48:30.504515" 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-25T23:48:30.506159" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.506023" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.505999" 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-25T23:48:30.510903" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.510710" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.510692" elapsed="0.000280"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.511979" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:48:30.511570" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.512475" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:48:30.512161" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:48:30.512546" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:48:30.512738" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:48:30.511197" elapsed="0.001567"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.518172" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.518060" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.518041" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.519425" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.519316" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.519299" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:30.519961" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:30.519635" elapsed="0.000354"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.520362" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.520142" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.571044" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:30.520901" elapsed="0.050251"/>
</kw>
<msg time="2026-04-25T23:48:30.571322" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:30.571371" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.520540" elapsed="0.050868"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.612970" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:30.571956" elapsed="0.041121"/>
</kw>
<msg time="2026-04-25T23:48:30.613238" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:30.613285" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.571577" elapsed="0.041745"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.613705" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.613459" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.613437" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.614258" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.613924" elapsed="0.000405"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.614607" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.614395" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.614378" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:30.614737" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.617228" elapsed="0.000147"/>
</kw>
<msg time="2026-04-25T23:48:30.617437" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:30.616164" elapsed="0.001404"/>
</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="NOT RUN" start="2026-04-25T23:48:30.617874" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.618214" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:30.615540" elapsed="0.002860"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:30.615008" elapsed="0.003455"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:30.519013" elapsed="0.099548"/>
</kw>
<msg time="2026-04-25T23:48:30.618655" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.618719" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.518389" elapsed="0.100368"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:30.618939" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:30.618832" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.618814" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.619410" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.619752" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.619823" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:30.517716" elapsed="0.102214"/>
</kw>
<msg time="2026-04-25T23:48:30.620024" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.620069" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.513139" elapsed="0.106968"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.620423" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.620182" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.620165" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:48:30.513001" elapsed="0.107521"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.625920" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.625809" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.625789" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.627153" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.627046" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.627028" elapsed="0.000234"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:30.627753" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:30.627434" elapsed="0.000346"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.628145" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.627932" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.674477" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:30.628656" elapsed="0.045931"/>
</kw>
<msg time="2026-04-25T23:48:30.674773" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:30.674820" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.628324" elapsed="0.046533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.717232" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:30.675357" elapsed="0.041983"/>
</kw>
<msg time="2026-04-25T23:48:30.717501" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:30.717547" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.675022" elapsed="0.042562"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.717946" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.717723" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.717695" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.718458" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.718161" elapsed="0.000367"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.718822" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.718595" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.718576" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:30.718931" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.721347" elapsed="0.000147"/>
</kw>
<msg time="2026-04-25T23:48:30.721557" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:30.720324" elapsed="0.001495"/>
</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="NOT RUN" start="2026-04-25T23:48:30.722131" elapsed="0.000101"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.722482" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:30.719713" elapsed="0.002951"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:30.719180" elapsed="0.003572"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:30.626742" elapsed="0.096109"/>
</kw>
<msg time="2026-04-25T23:48:30.722947" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.722998" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.626163" elapsed="0.096889"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:30.723282" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:48:30.723161" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.723134" elapsed="0.000236"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.723795" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.724177" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.724251" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:30.625385" elapsed="0.098978"/>
</kw>
<msg time="2026-04-25T23:48:30.724462" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.724507" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.620791" elapsed="0.103754"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.724888" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.724623" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.724605" elapsed="0.000364"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:48:30.620642" elapsed="0.104352"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.730466" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.730354" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.730335" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.731798" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:48:30.731651" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.731633" elapsed="0.000234"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:48:30.732308" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:48:30.732007" elapsed="0.000329"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.732775" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.732531" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.777547" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:30.733284" elapsed="0.044443"/>
</kw>
<msg time="2026-04-25T23:48:30.777978" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:48:30.778048" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.732956" elapsed="0.045147"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.851159" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:48:30.778882" elapsed="0.072386"/>
</kw>
<msg time="2026-04-25T23:48:30.851431" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:48:30.851478" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.778351" elapsed="0.073164"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.851841" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.851594" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.851574" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.852365" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "A "d "d "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.852057" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.852727" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.852501" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.852483" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:48:30.852839" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:48:30.855374" elapsed="0.000153"/>
</kw>
<msg time="2026-04-25T23:48:30.855629" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:48:30.854274" elapsed="0.001519"/>
</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="NOT RUN" start="2026-04-25T23:48:30.856067" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.856414" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:48:30.853648" elapsed="0.002953"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:48:30.853120" elapsed="0.003546"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:48:30.731347" elapsed="0.125442"/>
</kw>
<msg time="2026-04-25T23:48:30.856944" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.857000" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.730782" elapsed="0.126257"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:48:30.857234" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:48:30.857123" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.857103" elapsed="0.000215"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.857745" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.858074" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:48:30.858146" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:48:30.729999" elapsed="0.128255"/>
</kw>
<msg time="2026-04-25T23:48:30.858349" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:48:30.858393" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.725257" elapsed="0.133173"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:48:30.858778" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:48:30.858505" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-04-25T23:48:30.858488" elapsed="0.000369"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:48:30.725122" elapsed="0.133758"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:48:30.512824" elapsed="0.346086"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:48:30.510334" elapsed="0.348632"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:48:30.505717" elapsed="0.353307"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:48:30.505216" elapsed="0.353855"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:48:30.502397" elapsed="0.356727"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.867456" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 6</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.867199" elapsed="0.000304"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:48:30.871823" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188</msg>
<msg time="2026-04-25T23:48:30.871943" level="INFO">${output} = python cluster_rest_script.py --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:48:30.867649" elapsed="0.004325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:48:30.872464" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:48:30.872172" elapsed="0.000345"/>
</kw>
<arg>${addpeoplecmd}</arg>
<arg>--host ${ODL_SYSTEM_1_IP},${ODL_SYSTEM_2_IP},${ODL_SYSTEM_3_IP} ${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:48:30.866735" elapsed="0.005849"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:48:36.878655" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:48:30,976 INFO: Add 10000 people to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:48:30.878112" elapsed="6.002210">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:48:30,976 INFO: Add 10000 people to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:48:43.881717" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:48:37.881101" elapsed="6.001268">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:48:50.883607" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:48:44.883081" elapsed="6.001164">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:48:57.885663" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:48:51.885000" elapsed="6.001355">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:04.887882" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:48:58.887135" elapsed="6.001448">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:11.890025" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:05.889273" elapsed="6.001623">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:18.892451" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:12.891654" elapsed="6.001517">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:25.894717" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:19.893966" elapsed="6.001489">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:32.897753" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
2026-04-25 23:49:30,283 INFO: Response code(s) got per number of requests: {204: 3163}
2026-04-25 23:49:30,291 INFO: Response code(s) got per number of requests: {204: 3180}
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:26.896361" elapsed="6.002097">No match found for '&gt;' in 6 seconds
Output:
2026-04-25 23:49:30,283 INFO: Response code(s) got per number of requests: {204: 3163}
2026-04-25 23:49:30,291 INFO: Response code(s) got per number of requests: {204: 3180}
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.419771" level="INFO">2026-04-25 23:49:37,397 INFO: Response code(s) got per number of requests: {204: 1115}
2026-04-25 23:49:37,398 INFO: Response code(s) got per number of requests: {204: 1106}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:49:33.899136" elapsed="3.520795"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:48:30.877527" elapsed="66.542486"/>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit.</doc>
<status status="PASS" start="2026-04-25T23:48:30.877130" elapsed="66.542965"/>
</kw>
<doc>Request to add 10000 people (timeout in 5m).</doc>
<status status="PASS" start="2026-04-25T23:48:30.501867" elapsed="66.918415"/>
</test>
<test id="s1-s2-t4" name="Verify People" 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-25T23:49:37.423823" elapsed="0.000301"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:49:37.423503" elapsed="0.000682"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.425322" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.425169" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.425143" elapsed="0.000264"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.430379" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.430269" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.430249" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:49:37.431510" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:49:37.431099" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:49:37.432048" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:49:37.431723" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:49:37.432131" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T23:49:37.432304" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:49:37.430701" elapsed="0.001627"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.438375" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.438265" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.438246" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.439995" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.439875" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.439857" elapsed="0.000208"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:37.440509" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:37.440203" elapsed="0.000333"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.440922" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:37.440703" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.576174" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:37.441431" elapsed="0.134963"/>
</kw>
<msg time="2026-04-25T23:49:37.576626" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:37.576712" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.441102" elapsed="0.135651"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.708161" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:37.577420" elapsed="0.130863"/>
</kw>
<msg time="2026-04-25T23:49:37.708451" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:37.708497" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.576992" elapsed="0.131543"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.708922" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.708635" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.708606" elapsed="0.000403"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:37.709468" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:37.709148" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.709839" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.709610" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.709592" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:37.709959" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:37.712633" elapsed="0.000182"/>
</kw>
<msg time="2026-04-25T23:49:37.712877" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:37.711497" elapsed="0.001515"/>
</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="NOT RUN" start="2026-04-25T23:49:37.713280" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.713603" elapsed="0.000096"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:37.710853" elapsed="0.002956"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:37.710278" elapsed="0.003594"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:37.439538" elapsed="0.274435"/>
</kw>
<msg time="2026-04-25T23:49:37.714071" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:37.714117" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.438783" elapsed="0.275373"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:37.714342" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:49:37.714234" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.714216" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.714901" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.715240" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.715310" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:37.437917" elapsed="0.277502"/>
</kw>
<msg time="2026-04-25T23:49:37.715516" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:37.715560" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.432723" elapsed="0.282875"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.715946" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.715688" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.715655" elapsed="0.000368"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:49:37.432559" elapsed="0.283487"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.721539" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.721432" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.721413" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.722800" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.722664" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.722647" elapsed="0.000222"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:37.723307" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:37.723005" elapsed="0.000328"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.723708" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:37.723482" elapsed="0.000252"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.858263" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:37.724247" elapsed="0.134232"/>
</kw>
<msg time="2026-04-25T23:49:37.858746" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:37.858799" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.723920" elapsed="0.134937"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.983095" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:37.859552" elapsed="0.123775"/>
</kw>
<msg time="2026-04-25T23:49:37.983559" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:37.983607" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.859098" elapsed="0.124560"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.984134" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.983813" elapsed="0.000382"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.983775" elapsed="0.000446"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:37.984786" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:37.984359" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.985143" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.984932" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.984914" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:37.985327" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:37.988009" elapsed="0.000151"/>
</kw>
<msg time="2026-04-25T23:49:37.988223" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:37.986856" elapsed="0.001501"/>
</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="NOT RUN" start="2026-04-25T23:49:37.988620" elapsed="0.000100"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.988969" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:37.986210" elapsed="0.002945"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:37.985633" elapsed="0.003587"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:37.722364" elapsed="0.266956"/>
</kw>
<msg time="2026-04-25T23:49:37.989418" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:37.989463" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.721807" elapsed="0.267694"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:37.989703" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:49:37.989578" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.989559" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.990184" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.990521" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.990593" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:37.721082" elapsed="0.269639"/>
</kw>
<msg time="2026-04-25T23:49:37.990821" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:37.990866" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.716314" elapsed="0.274590"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:37.991220" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:37.990980" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.990962" elapsed="0.000334"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:49:37.716178" elapsed="0.275142"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.996894" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.996785" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.996765" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:37.998098" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:37.997990" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:37.997972" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:37.998604" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:37.998303" elapsed="0.000327"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:37.999011" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:37.998797" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:38.101949" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:37.999520" elapsed="0.102574"/>
</kw>
<msg time="2026-04-25T23:49:38.102326" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:38.102397" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.999193" elapsed="0.103259"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:38.194712" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:38.103321" elapsed="0.091500"/>
</kw>
<msg time="2026-04-25T23:49:38.194982" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:38.195029" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:38.102803" elapsed="0.092264"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.195370" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:38.195147" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:38.195126" elapsed="0.000323"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:38.195951" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:38.195607" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.196301" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:38.196090" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:38.196072" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:38.196413" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:38.198814" elapsed="0.000143"/>
</kw>
<msg time="2026-04-25T23:49:38.199018" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:38.197830" elapsed="0.001316"/>
</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="NOT RUN" start="2026-04-25T23:49:38.199409" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.199815" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:38.197215" elapsed="0.002784"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:38.196688" elapsed="0.003376"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:37.997660" elapsed="0.202518"/>
</kw>
<msg time="2026-04-25T23:49:38.200272" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:38.200317" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.997107" elapsed="0.203247"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:38.200537" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:49:38.200429" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:38.200411" elapsed="0.000209"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.201028" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.201355" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:38.201427" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:37.996377" elapsed="0.205156"/>
</kw>
<msg time="2026-04-25T23:49:38.201626" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:38.201687" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.991585" elapsed="0.210141"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:38.202080" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:38.201800" elapsed="0.000406"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:38.201783" elapsed="0.000449"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:49:37.991449" elapsed="0.210806"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:49:37.432383" elapsed="0.769902"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:49:37.429877" elapsed="0.772467"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:49:37.424817" elapsed="0.777583"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:37.424336" elapsed="0.778111"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:49:37.421328" elapsed="0.781172"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:49:38.203586" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:49:38.203247" elapsed="0.000368"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:38.203789" elapsed="0.000212"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:49:38.202986" elapsed="0.001081"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.204894" level="INFO">handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
^CException ignored in: &lt;module 'threading' from '/usr/lib/python3.10/threading.py'&gt;
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1567, in _shutdown
    lock.acquire()
KeyboardInterrupt: 
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:49:40.205265" level="INFO">${output} = 
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  Fil...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:49:38.204209" elapsed="2.001127"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.207289" level="INFO">
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 703, in add_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
^CException ignored in: &lt;module 'threading' from '/usr/lib/python3.10/threading.py'&gt;
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1567, in _shutdown
    lock.acquire()
KeyboardInterrupt: 
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt; </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.205858" elapsed="0.001569"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:49:38.202656" elapsed="2.004919"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.220579" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:49:40.233934" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:49:40.234073" level="INFO">${output_log} = 2026-04-25 23:48:30,976 INFO: Add 10000 people to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
2026-04-25 23:49:30,283 INFO: Response code(s) got per number of requests: {204: 3163}
20...</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:49:40.220436" elapsed="0.013675"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.235133" level="INFO">2026-04-25 23:48:30,976 INFO: Add 10000 people to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
2026-04-25 23:49:30,283 INFO: Response code(s) got per number of requests: {204: 3163}
2026-04-25 23:49:30,291 INFO: Response code(s) got per number of requests: {204: 3180}
2026-04-25 23:49:37,397 INFO: Response code(s) got per number of requests: {204: 1115}
2026-04-25 23:49:37,398 INFO: Response code(s) got per number of requests: {204: 1106}</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.234441" elapsed="0.000807"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:49:40.236482" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script_add_people.log"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script_add_people.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:49:40.235649" elapsed="0.000958"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>cluster_rest_script_add_people.log</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:49:40.220081" elapsed="0.016691"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:49:40.482960" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/people:people?content=config 
 path_url=/rests/data/people:people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:49:40.488038" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/people:people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked'} 
 body=&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;&lt;person&gt;&lt;id&gt;1674&lt;/id&gt;&lt;address&gt;address1674&lt;/address&gt;&lt;contactNo&gt;1674&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1571&lt;/id&gt;&lt;address&gt;address1571&lt;/address&gt;&lt;contactNo&gt;1571&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2044&lt;/id&gt;&lt;address&gt;address2044&lt;/address&gt;&lt;contactNo&gt;2044&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3635&lt;/id&gt;&lt;address&gt;address3635&lt;/address&gt;&lt;contactNo&gt;3635&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3022&lt;/id&gt;&lt;address&gt;address3022&lt;/address&gt;&lt;contactNo&gt;3022&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9453&lt;/id&gt;&lt;address&gt;address9453&lt;/address&gt;&lt;contactNo&gt;9453&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4176&lt;/id&gt;&lt;address&gt;address4176&lt;/address&gt;&lt;contactNo&gt;4176&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2821&lt;/id&gt;&lt;address&gt;address2821&lt;/address&gt;&lt;contactNo&gt;2821&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1665&lt;/id&gt;&lt;address&gt;address1665&lt;/address&gt;&lt;contactNo&gt;1665&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1562&lt;/id&gt;&lt;address&gt;address1562&lt;/address&gt;&lt;contactNo&gt;1562&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2035&lt;/id&gt;&lt;address&gt;address2035&lt;/address&gt;&lt;contactNo&gt;2035&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3622&lt;/id&gt;&lt;address&gt;address3622&lt;/address&gt;&lt;contactNo&gt;3622&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6200&lt;/id&gt;&lt;address&gt;address6200&lt;/address&gt;&lt;contactNo&gt;6200&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3031&lt;/id&gt;&lt;address&gt;address3031&lt;/address&gt;&lt;contactNo&gt;3031&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9462&lt;/id&gt;&lt;address&gt;address9462&lt;/address&gt;&lt;contactNo&gt;9462&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4185&lt;/id&gt;&lt;address&gt;address4185&lt;/address&gt;&lt;contactNo&gt;4185&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1979&lt;/id&gt;&lt;address&gt;address1979&lt;/address&gt;&lt;contactNo&gt;1979&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2062&lt;/id&gt;&lt;address&gt;address2062&lt;/address&gt;&lt;contactNo&gt;2062&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3617&lt;/id&gt;&lt;address&gt;address3617&lt;/address&gt;&lt;contactNo&gt;3617&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7895&lt;/id&gt;&lt;address&gt;address7895&lt;/address&gt;&lt;contactNo&gt;7895&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6213&lt;/id&gt;&lt;address&gt;address6213&lt;/address&gt;&lt;contactNo&gt;6213&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3004&lt;/id&gt;&lt;address&gt;address3004&lt;/address&gt;&lt;contactNo&gt;3004&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2803&lt;/id&gt;&lt;address&gt;address2803&lt;/address&gt;&lt;contactNo&gt;2803&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2053&lt;/id&gt;&lt;address&gt;address2053&lt;/address&gt;&lt;contactNo&gt;2053&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3604&lt;/id&gt;&lt;address&gt;address3604&lt;/address&gt;&lt;contactNo&gt;3604&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7882&lt;/id&gt;&lt;address&gt;address7882&lt;/address&gt;&lt;contactNo&gt;7882&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6226&lt;/id&gt;&lt;address&gt;address6226&lt;/address&gt;&lt;contactNo&gt;6226&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3013&lt;/id&gt;&lt;address&gt;address3013&lt;/address&gt;&lt;contactNo&gt;3013&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6031&lt;/id&gt;&lt;address&gt;address6031&lt;/address&gt;&lt;contactNo&gt;6031&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2954&lt;/id&gt;&lt;address&gt;address2954&lt;/address&gt;&lt;contactNo&gt;2954&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3712&lt;/id&gt;&lt;address&gt;address3712&lt;/address&gt;&lt;contactNo&gt;3712&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3918&lt;/id&gt;&lt;address&gt;address3918&lt;/address&gt;&lt;contactNo&gt;3918&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2009&lt;/id&gt;&lt;address&gt;address2009&lt;/address&gt;&lt;contactNo&gt;2009&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3539&lt;/id&gt;&lt;address&gt;address3539&lt;/address&gt;&lt;contactNo&gt;3539&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2140&lt;/id&gt;&lt;address&gt;address2140&lt;/address&gt;&lt;contactNo&gt;2140&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3670&lt;/id&gt;&lt;address&gt;address3670&lt;/address&gt;&lt;contactNo&gt;3670&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9591&lt;/id&gt;&lt;address&gt;address9591&lt;/address&gt;&lt;contactNo&gt;9591&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6137&lt;/id&gt;&lt;address&gt;address6137&lt;/address&gt;&lt;contactNo&gt;6137&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9786&lt;/id&gt;&lt;address&gt;address9786&lt;/address&gt;&lt;contactNo&gt;9786&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4926&lt;/id&gt;&lt;address&gt;address4926&lt;/address&gt;&lt;contactNo&gt;4926&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6908&lt;/id&gt;&lt;address&gt;address6908&lt;/address&gt;&lt;contactNo&gt;6908&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2967&lt;/id&gt;&lt;address&gt;address2967&lt;/address&gt;&lt;contactNo&gt;2967&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3905&lt;/id&gt;&lt;address&gt;address3905&lt;/address&gt;&lt;contactNo&gt;3905&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3526&lt;/id&gt;&lt;address&gt;address3526&lt;/address&gt;&lt;contactNo&gt;3526&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2131&lt;/id&gt;&lt;address&gt;address2131&lt;/address&gt;&lt;contactNo&gt;2131&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9795&lt;/id&gt;&lt;address&gt;address9795&lt;/address&gt;&lt;contactNo&gt;9795&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4289&lt;/id&gt;&lt;address&gt;address4289&lt;/address&gt;&lt;contactNo&gt;4289&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4913&lt;/id&gt;&lt;address&gt;address4913&lt;/address&gt;&lt;contactNo&gt;4913&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2972&lt;/id&gt;&lt;address&gt;address2972&lt;/address&gt;&lt;contactNo&gt;2972&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1381&lt;/id&gt;&lt;address&gt;address1381&lt;/address&gt;&lt;contactNo&gt;1381&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1598&lt;/id&gt;&lt;address&gt;address1598&lt;/address&gt;&lt;contactNo&gt;1598&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2027&lt;/id&gt;&lt;address&gt;address2027&lt;/address&gt;&lt;contactNo&gt;2027&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3557&lt;/id&gt;&lt;address&gt;address3557&lt;/address&gt;&lt;contactNo&gt;3557&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2122&lt;/id&gt;&lt;address&gt;address2122&lt;/address&gt;&lt;contactNo&gt;2122&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3652&lt;/id&gt;&lt;address&gt;address3652&lt;/address&gt;&lt;contactNo&gt;3652&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4119&lt;/id&gt;&lt;address&gt;address4119&lt;/address&gt;&lt;contactNo&gt;4119&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6111&lt;/id&gt;&lt;address&gt;address6111&lt;/address&gt;&lt;contactNo&gt;6111&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7245&lt;/id&gt;&lt;address&gt;address7245&lt;/address&gt;&lt;contactNo&gt;7245&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4254&lt;/id&gt;&lt;address&gt;address4254&lt;/address&gt;&lt;contactNo&gt;4254&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4900&lt;/id&gt;&lt;address&gt;address4900&lt;/address&gt;&lt;contactNo&gt;4900&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2985&lt;/id&gt;&lt;address&gt;address2985&lt;/address&gt;&lt;contactNo&gt;2985&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1394&lt;/id&gt;&lt;address&gt;address1394&lt;/address&gt;&lt;contactNo&gt;1394&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1589&lt;/id&gt;&lt;address&gt;address1589&lt;/address&gt;&lt;contactNo&gt;1589&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2018&lt;/id&gt;&lt;address&gt;address2018&lt;/address&gt;&lt;contactNo&gt;2018&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3544&lt;/id&gt;&lt;address&gt;address3544&lt;/address&gt;&lt;contactNo&gt;3544&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2113&lt;/id&gt;&lt;address&gt;address2113&lt;/address&gt;&lt;contactNo&gt;2113&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4128&lt;/id&gt;&lt;address&gt;address4128&lt;/address&gt;&lt;contactNo&gt;4128&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6124&lt;/id&gt;&lt;address&gt;address6124&lt;/address&gt;&lt;contactNo&gt;6124&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7254&lt;/id&gt;&lt;address&gt;address7254&lt;/address&gt;&lt;contactNo&gt;7254&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;4263&lt;/id&gt;&lt;address&gt;address4263&lt;/address&gt;&lt;contactNo&gt;4263&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6685&lt;/id&gt;&lt;address&gt;address6685&lt;/address&gt;&lt;contactNo&gt;6685&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6490&lt;/id&gt;&lt;address&gt;address6490&lt;/address&gt;&lt;contactNo&gt;6490&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6186&lt;/id&gt;&lt;address&gt;address6186&lt;/address&gt;&lt;contactNo&gt;6186&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7526&lt;/id&gt;&lt;address&gt;address7526&lt;/address&gt;&lt;contactNo&gt;7526&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7423&lt;/id&gt;&lt;address&gt;address7423&lt;/address&gt;&lt;contactNo&gt;7423&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6887&lt;/id&gt;&lt;address&gt;address6887&lt;/address&gt;&lt;contactNo&gt;6887&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;8922&lt;/id&gt;&lt;address&gt;address8922&lt;/address&gt;&lt;contactNo&gt;8922&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2617&lt;/id&gt;&lt;address&gt;address2617&lt;/address&gt;&lt;contactNo&gt;2617&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6672&lt;/id&gt;&lt;address&gt;address6672&lt;/address&gt;&lt;contactNo&gt;6672&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6195&lt;/id&gt;&lt;address&gt;address6195&lt;/address&gt;&lt;contactNo&gt;6195&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7241&lt;/id&gt;&lt;address&gt;address7241&lt;/address&gt;&lt;contactNo&gt;7241&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7539&lt;/id&gt;&lt;address&gt;address7539&lt;/address&gt;&lt;contactNo&gt;7539&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7436&lt;/id&gt;&lt;address&gt;address7436&lt;/address&gt;&lt;contactNo&gt;7436&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6874&lt;/id&gt;&lt;address&gt;address6874&lt;/address&gt;&lt;contactNo&gt;6874&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;493&lt;/id&gt;&lt;address&gt;address493&lt;/address&gt;&lt;contactNo&gt;493&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1208&lt;/id&gt;&lt;address&gt;address1208&lt;/address&gt;&lt;contactNo&gt;1208&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3496&lt;/id&gt;&lt;address&gt;address3496&lt;/address&gt;&lt;contactNo&gt;3496&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9234&lt;/id&gt;&lt;address&gt;address9234&lt;/address&gt;&lt;contactNo&gt;9234&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6160&lt;/id&gt;&lt;address&gt;address6160&lt;/address&gt;&lt;contactNo&gt;6160&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;5405&lt;/id&gt;&lt;address&gt;address5405&lt;/address&gt;&lt;contactNo&gt;5405&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;484&lt;/id&gt;&lt;address&gt;address484&lt;/address&gt;&lt;contactNo&gt;484&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1217&lt;/id&gt;&lt;address&gt;address1217&lt;/address&gt;&lt;contactNo&gt;1217&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;8809&lt;/id&gt;&lt;address&gt;address8809&lt;/address&gt;&lt;contactNo&gt;8809&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6698&lt;/id&gt;&lt;address&gt;address6698&lt;/address&gt;&lt;contactNo&gt;6698&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3487&lt;/id&gt;&lt;address&gt;address3487&lt;/address&gt;&lt;contactNo&gt;3487&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6559&lt;/id&gt;&lt;address&gt;address6559&lt;/address&gt;&lt;contactNo&gt;6559&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9225&lt;/id&gt;&lt;address&gt;address9225&lt;/address&gt;&lt;contactNo&gt;9225&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;5414&lt;/id&gt;&lt;address&gt;address5414&lt;/address&gt;&lt;contactNo&gt;5414&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9782&lt;/id&gt;&lt;address&gt;address9782&lt;/address&gt;&lt;contactNo&gt;9782&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7410&lt;/id&gt;&lt;address&gt;address7410&lt;/address&gt;&lt;contactNo&gt;7410&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6892&lt;/id&gt;&lt;address&gt;address6892&lt;/address&gt;&lt;contactNo&gt;6892&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;1911&lt;/id&gt;&lt;address&gt;address1911&lt;/address&gt;&lt;contactNo&gt;1911&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;571&lt;/id&gt;&lt;address&gt;address571&lt;/address&gt;&lt;contactNo&gt;571&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;476&lt;/id&gt;&lt;address&gt;address476&lt;/address&gt;&lt;contactNo&gt;476&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2200&lt;/id&gt;&lt;address&gt;address2200&lt;/address&gt;&lt;contactNo&gt;2200&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3332&lt;/id&gt;&lt;address&gt;address3332&lt;/address&gt;&lt;contactNo&gt;3332&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;2347&lt;/id&gt;&lt;address&gt;address2347&lt;/address&gt;&lt;contactNo&gt;2347&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;3479&lt;/id&gt;&lt;address&gt;address3479&lt;/address&gt;&lt;contactNo&gt;3479&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9312&lt;/id&gt;&lt;address&gt;address9312&lt;/address&gt;&lt;contactNo&gt;9312&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6350&lt;/id&gt;&lt;address&gt;address6350&lt;/address&gt;&lt;contactNo&gt;6350&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9507&lt;/id&gt;&lt;address&gt;address9507&lt;/address&gt;&lt;contactNo&gt;9507&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;9404&lt;/id&gt;&lt;address&gt;address9404&lt;/address&gt;&lt;contactNo&gt;9404&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;6035&lt;/id&gt;&lt;address&gt;address6035&lt;/address&gt;&lt;contactNo&gt;6035&lt;/contactNo&gt;&lt;/person&gt;&lt;person&gt;&lt;id&gt;7563&lt;/id&gt;&lt;address&gt;address7563&lt;/address&gt;&lt;contactNo&gt;7563&lt;/contactNo&gt;&lt;/person... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:49:40.488724" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:49:40.237112" elapsed="0.251677"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:49:40.577132" level="INFO">10000 elements matched 'person'.</msg>
<msg time="2026-04-25T23:49:40.577317" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:49:40.489167" elapsed="0.088178"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-25T23:49:40.577613" elapsed="0.000446"/>
</kw>
<doc>Store logs and verify result</doc>
<status status="PASS" start="2026-04-25T23:49:37.420751" elapsed="3.157437"/>
</test>
<test id="s1-s2-t5" name="Purchase Cars" line="84">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:49:40.581423" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:49:40.581164" 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-25T23:49:40.582794" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.582637" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.582613" 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-25T23:49:40.587505" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.587396" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.587378" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.588581" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:49:40.588190" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.589092" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:49:40.588783" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:49:40.589163" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:49:40.589327" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:49:40.587817" elapsed="0.001535"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.594767" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.594635" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.594615" elapsed="0.000222"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.595998" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.595890" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.595872" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:40.596509" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:40.596206" elapsed="0.000330"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.596925" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.596703" elapsed="0.000249"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.641620" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:40.597438" elapsed="0.044589"/>
</kw>
<msg time="2026-04-25T23:49:40.642533" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:40.642646" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.597104" elapsed="0.045668"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.700791" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:40.643948" elapsed="0.056966"/>
</kw>
<msg time="2026-04-25T23:49:40.701081" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:40.701128" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.643260" elapsed="0.057906"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.701651" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.701375" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.701338" elapsed="0.000426"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.702238" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.701913" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.702625" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.702408" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.702389" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:40.702765" elapsed="0.000048"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.705450" elapsed="0.000154"/>
</kw>
<msg time="2026-04-25T23:49:40.705745" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:40.704387" elapsed="0.001512"/>
</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="NOT RUN" start="2026-04-25T23:49:40.706185" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.706532" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:40.703716" elapsed="0.003023"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:40.703109" elapsed="0.003696"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:40.595558" elapsed="0.111348"/>
</kw>
<msg time="2026-04-25T23:49:40.707004" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.707050" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.594982" elapsed="0.112107"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:40.707279" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:49:40.707168" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.707149" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.707815" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.708165" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.708236" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:40.594279" elapsed="0.114067"/>
</kw>
<msg time="2026-04-25T23:49:40.708444" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.708489" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.589739" elapsed="0.118791"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.708883" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.708607" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.708589" elapsed="0.000372"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:49:40.589587" elapsed="0.119398"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.714707" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.714582" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.714562" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.715951" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.715843" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.715825" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:40.716502" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:40.716193" elapsed="0.000335"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.716913" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.716697" elapsed="0.000242"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.784154" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:40.717423" elapsed="0.066979"/>
</kw>
<msg time="2026-04-25T23:49:40.784706" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:40.784759" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.717092" elapsed="0.067706"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.854126" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:40.785594" elapsed="0.068685"/>
</kw>
<msg time="2026-04-25T23:49:40.854466" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:40.854512" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.785082" elapsed="0.069468"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.854986" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.854662" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.854627" elapsed="0.000450"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.855564" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.855224" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.855945" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.855731" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.855710" elapsed="0.000313"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:40.856065" elapsed="0.000049"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.858927" elapsed="0.000157"/>
</kw>
<msg time="2026-04-25T23:49:40.859147" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:40.857706" elapsed="0.001581"/>
</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="NOT RUN" start="2026-04-25T23:49:40.859564" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.859918" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:40.857026" elapsed="0.003078"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:40.856418" elapsed="0.003751"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:40.715516" elapsed="0.144751"/>
</kw>
<msg time="2026-04-25T23:49:40.860364" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.860411" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.714954" elapsed="0.145498"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:40.860642" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-04-25T23:49:40.860532" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.860512" elapsed="0.000234"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.861163" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.861571" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.861644" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:40.714208" elapsed="0.147565"/>
</kw>
<msg time="2026-04-25T23:49:40.861872" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.861926" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.709266" elapsed="0.152702"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.862333" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.862049" elapsed="0.000352"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.862030" elapsed="0.000395"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:49:40.709129" elapsed="0.153320"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.868043" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.867932" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.867912" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.869281" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:49:40.869172" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.869154" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:49:40.869807" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:49:40.869489" elapsed="0.000345"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.870195" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.869984" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.921205" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:40.870755" elapsed="0.050818"/>
</kw>
<msg time="2026-04-25T23:49:40.922092" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:49:40.922244" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.870409" elapsed="0.051923"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.972630" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:49:40.923809" elapsed="0.049088"/>
</kw>
<msg time="2026-04-25T23:49:40.973148" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:49:40.973198" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.922860" elapsed="0.050376"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.973755" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.973370" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.973327" elapsed="0.000521"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.974425" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "P "u "r "c "h "a "s "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.973996" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.974803" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.974572" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.974553" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:49:40.974921" elapsed="0.000046"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:49:40.977594" elapsed="0.000174"/>
</kw>
<msg time="2026-04-25T23:49:40.977903" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:49:40.976549" elapsed="0.001497"/>
</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="NOT RUN" start="2026-04-25T23:49:40.978351" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.978700" elapsed="0.000079"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:49:40.975880" elapsed="0.003012"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:49:40.975261" elapsed="0.003697"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:49:40.868864" elapsed="0.110195"/>
</kw>
<msg time="2026-04-25T23:49:40.979158" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.979202" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.868258" elapsed="0.110983"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:49:40.979428" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:49:40.979320" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.979300" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.979949" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.980295" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:49:40.980367" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:49:40.867548" elapsed="0.112930"/>
</kw>
<msg time="2026-04-25T23:49:40.980579" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:49:40.980625" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.862755" elapsed="0.117907"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:49:40.981013" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:49:40.980765" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-04-25T23:49:40.980747" elapsed="0.000343"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:49:40.862596" elapsed="0.118519"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:49:40.589409" elapsed="0.391745"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:49:40.587032" elapsed="0.394188"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:49:40.582321" elapsed="0.398961"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:49:40.581870" elapsed="0.399462"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:49:40.579050" elapsed="0.402343"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.989912" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 6</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.989639" elapsed="0.000320"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:49:40.993840" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188</msg>
<msg time="2026-04-25T23:49:40.993938" level="INFO">${output} = python cluster_rest_script.py --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188 
</msg>
<var>${output}</var>
<arg>${command} ${tool_opt}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:49:40.990107" elapsed="0.003857"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:49:40.994420" level="INFO">python cluster_rest_script.py --port 8181 add-rpc --itemtype car-people --itemcount 10000 --threads 6 --host 10.30.171.37,10.30.171.80,10.30.170.188 
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:49:40.994120" elapsed="0.000348"/>
</kw>
<arg>${purchasecmd}</arg>
<arg>--host ${ODL_SYSTEM_1_IP},${ODL_SYSTEM_2_IP},${ODL_SYSTEM_3_IP} ${TOOL_OPTIONS}</arg>
<doc>Start the tool ${command} ${tool_opt}</doc>
<status status="PASS" start="2026-04-25T23:49:40.989176" elapsed="0.005348"/>
</kw>
<kw name="Wait_Until_Tool_Finish">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:46.999429" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:49:41,096 INFO: Add 10000 purchase(s) to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:40.999087" elapsed="6.001123">No match found for '&gt;' in 6 seconds
Output:
[?2004l2026-04-25 23:49:41,096 INFO: Add 10000 purchase(s) to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:49:54.001993" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:48.000938" elapsed="6.002516">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:01.005215" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:49:55.004476" elapsed="6.001501">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:08.007373" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:02.006835" elapsed="6.001170">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:15.009401" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:09.008757" elapsed="6.001317">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:22.011499" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:16.010841" elapsed="6.001331">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:29.013575" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:23.012953" elapsed="6.001399">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:36.015939" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:30.015130" elapsed="6.001554">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:43.018740" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:37.017454" elapsed="6.002012">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:50.020914" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:44.020192" elapsed="6.001446">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:50:57.023429" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:51.022618" elapsed="6.001533">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:04.025658" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:50:58.024936" elapsed="6.001491">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:11.028073" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:05.027342" elapsed="6.001475">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:18.030896" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:12.029723" elapsed="6.001875">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:25.033273" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:19.032412" elapsed="6.001661">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:32.035732" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:26.034951" elapsed="6.001475">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:39.037826" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:33.037210" elapsed="6.001257">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:46.039846" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:40.039216" elapsed="6.001383">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:51:53.042014" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:47.041217" elapsed="6.001876">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:00.045095" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:51:54.043912" elapsed="6.002689">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:07.048397" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:01.047547" elapsed="6.001583">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:14.050850" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:08.050006" elapsed="6.001614">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:21.053344" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:15.052505" elapsed="6.001516">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:28.055438" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:22.054769" elapsed="6.001726">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:35.057861" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:29.057251" elapsed="6.001222">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:42.059844" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:36.059178" elapsed="6.001869">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:49.062535" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:43.061817" elapsed="6.001450">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:52:56.064631" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:50.064074" elapsed="6.001226">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:03.066948" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:52:57.066131" elapsed="6.001567">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:10.069559" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:04.068493" elapsed="6.001804">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:17.071831" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:11.071093" elapsed="6.001978">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:24.074751" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:18.073900" elapsed="6.001607">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:31.076901" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:25.076322" elapsed="6.001204">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:38.078836" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:32.078220" elapsed="6.001260">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:45.080834" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:39.080221" elapsed="6.001354">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:52.083022" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:46.082406" elapsed="6.001227">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:53:59.085006" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:53:53.084346" elapsed="6.001396">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:06.087349" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:00.086518" elapsed="6.001627">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:13.089891" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:07.088994" elapsed="6.001673">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:20.092361" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:14.091567" elapsed="6.001540">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:27.095333" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:21.093994" elapsed="6.002126">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:34.098007" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:28.096985" elapsed="6.002350">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.100645" level="FAIL">No match found for '&gt;' in 6 seconds
Output:
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-25T23:54:35.100132" elapsed="6.001217">No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<msg time="2026-04-25T23:54:41.101515" level="FAIL">Keyword 'SSHLibrary.Read Until Prompt' failed after retrying for 5 minutes. The last error was: No match found for '&gt;' in 6 seconds
Output:
.</msg>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>SSHLibrary.Read Until Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T23:49:40.998575" elapsed="300.103422">Keyword 'SSHLibrary.Read Until Prompt' failed after retrying for 5 minutes. The last error was: No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<arg>${PROCEDURE_TIMEOUT}</arg>
<doc>Wait ${timeout} for the tool exit.</doc>
<status status="FAIL" start="2026-04-25T23:49:40.998239" elapsed="300.104012">Keyword 'SSHLibrary.Read Until Prompt' failed after retrying for 5 minutes. The last error was: No match found for '&gt;' in 6 seconds
Output:
.</status>
</kw>
<doc>Request to purchase 10000 cars (timeout in 5m).</doc>
<status status="FAIL" start="2026-04-25T23:49:40.578524" elapsed="300.523950">Keyword 'SSHLibrary.Read Until Prompt' failed after retrying for 5 minutes. The last error was: No match found for '&gt;' in 6 seconds
Output:
.</status>
</test>
<test id="s1-s2-t6" name="Verify Purchases" 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-25T23:54:41.105755" elapsed="0.000314"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:54:41.105465" 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-25T23:54:41.107212" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.107082" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.107057" elapsed="0.000229"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.111872" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.111765" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.111747" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.112990" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:54:41.112545" elapsed="0.000474"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.113481" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:54:41.113173" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:54:41.113552" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:54:41.113742" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:54:41.112170" elapsed="0.001598"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.119152" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.119044" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.119024" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.120455" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.120347" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.120317" elapsed="0.000207"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:54:41.121035" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:54:41.120664" elapsed="0.000398"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.121437" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.121217" elapsed="0.000245"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.165523" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:54:41.121961" elapsed="0.043680"/>
</kw>
<msg time="2026-04-25T23:54:41.165860" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:54:41.165908" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.121613" elapsed="0.044332"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.213620" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:54:41.166496" elapsed="0.047264"/>
</kw>
<msg time="2026-04-25T23:54:41.213947" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:54:41.213996" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.166127" elapsed="0.047906"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.214360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.214121" elapsed="0.000359"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.214098" elapsed="0.000411"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.214996" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:54:41.214653" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.215382" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.215163" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.215143" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:54:41.215515" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.218182" elapsed="0.000197"/>
</kw>
<msg time="2026-04-25T23:54:41.218447" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:54:41.217128" elapsed="0.001451"/>
</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="NOT RUN" start="2026-04-25T23:54:41.218962" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.219288" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:54:41.216393" elapsed="0.003079"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:54:41.215844" elapsed="0.003691"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:54:41.119994" elapsed="0.099639"/>
</kw>
<msg time="2026-04-25T23:54:41.219751" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.219797" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.119381" elapsed="0.100454"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:54:41.220022" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:54:41.219912" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.219893" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.220649" elapsed="0.000043"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.221014" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.221086" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:54:41.118700" elapsed="0.102494"/>
</kw>
<msg time="2026-04-25T23:54:41.221289" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.221333" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.114137" elapsed="0.107233"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.221699" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.221443" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.221427" elapsed="0.000351"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:54:41.114002" elapsed="0.107799"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.227274" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.227166" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.227147" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.228498" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.228391" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.228374" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:54:41.229100" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:54:41.228782" elapsed="0.000344"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.229600" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.229379" elapsed="0.000248"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.280179" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:54:41.230205" elapsed="0.050074"/>
</kw>
<msg time="2026-04-25T23:54:41.280451" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:54:41.280499" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.229798" elapsed="0.050738"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.354525" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:54:41.281089" elapsed="0.073550"/>
</kw>
<msg time="2026-04-25T23:54:41.354819" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:54:41.354865" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.280724" elapsed="0.074177"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.355198" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.354979" elapsed="0.000273"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.354960" elapsed="0.000317"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.355739" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:54:41.355413" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.356089" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.355880" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.355862" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:54:41.356198" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.358654" elapsed="0.000161"/>
</kw>
<msg time="2026-04-25T23:54:41.358875" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:54:41.357616" elapsed="0.001387"/>
</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="NOT RUN" start="2026-04-25T23:54:41.359264" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.359585" elapsed="0.000073"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:54:41.357021" elapsed="0.002774"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:54:41.356454" elapsed="0.003404"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:54:41.228089" elapsed="0.131865"/>
</kw>
<msg time="2026-04-25T23:54:41.360044" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.360088" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.227487" elapsed="0.132638"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:54:41.360308" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:54:41.360200" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.360182" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.360798" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.361144" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.361216" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:54:41.226816" elapsed="0.134544"/>
</kw>
<msg time="2026-04-25T23:54:41.361455" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.361499" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.222063" elapsed="0.139473"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.361867" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.361610" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.361593" elapsed="0.000351"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:54:41.221928" elapsed="0.140039"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.367337" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.367229" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.367211" elapsed="0.000195"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.368535" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:54:41.368429" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.368412" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:54:41.369118" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:54:41.368775" elapsed="0.000370"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.369509" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.369297" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.402256" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:54:41.370033" elapsed="0.032322"/>
</kw>
<msg time="2026-04-25T23:54:41.402534" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:54:41.402581" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.369704" elapsed="0.032913"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:54:41.436066" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:54:41.403154" elapsed="0.033032"/>
</kw>
<msg time="2026-04-25T23:54:41.436344" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:54:41.436390" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.402820" elapsed="0.033607"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.436764" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.436504" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.436484" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.437330" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "V "e "r "i "f "y "[C "P "u "r "c "h "a "s "e "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:54:41.437010" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.437695" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.437468" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.437450" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:54:41.437807" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:54:41.440270" elapsed="0.000144"/>
</kw>
<msg time="2026-04-25T23:54:41.440474" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:54:41.439225" elapsed="0.001377"/>
</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="NOT RUN" start="2026-04-25T23:54:41.440945" elapsed="0.000090"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.441287" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:54:41.438595" elapsed="0.002874"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:54:41.438072" elapsed="0.003459"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:54:41.368130" elapsed="0.073498"/>
</kw>
<msg time="2026-04-25T23:54:41.441746" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.441791" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.367550" elapsed="0.074278"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:54:41.442010" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:54:41.441903" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.441885" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.442475" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.442818" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:54:41.442891" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:54:41.366886" elapsed="0.076111"/>
</kw>
<msg time="2026-04-25T23:54:41.443091" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:54:41.443139" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.362221" elapsed="0.080955"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:54:41.443488" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:54:41.443249" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:54:41.443232" elapsed="0.000332"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:54:41.362089" elapsed="0.081499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:54:41.113824" elapsed="0.329795"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:54:41.111391" elapsed="0.332300"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:54:41.106762" elapsed="0.336988"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:54:41.106280" elapsed="0.337516"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:54:41.103317" elapsed="0.340535"/>
</kw>
<kw name="Stop_Tool">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:54:41.444939" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:54:41.444589" elapsed="0.000398"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:54:41.445137" elapsed="0.000212"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-25T23:54:41.444327" elapsed="0.001089"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-25T23:54:43.447401" level="INFO">^CTraceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 755, in add_car_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 354, in _task_executor
    t.join()
  File "/usr/lib/python3.10/threading.py", line 1096, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.10/threading.py", line 1116, in _wait_for_tstate_lock
    if lock.acquire(block, timeout):
KeyboardInterrupt</msg>
<msg time="2026-04-25T23:54:43.447798" level="INFO">${output} = ^CTraceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  ...</msg>
<var>${output}</var>
<arg>delay=1s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-25T23:54:41.445559" elapsed="2.002310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:54:43.449039" level="INFO">^CTraceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 755, in add_car_people_rpc
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 354, in _task_executor
    t.join()
  File "/usr/lib/python3.10/threading.py", line 1096, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.10/threading.py", line 1116, in _wait_for_tstate_lock
    if lock.acquire(block, timeout):
KeyboardInterrupt
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:54:43.448310" elapsed="0.000992"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-25T23:54:41.444007" elapsed="2.005433"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:54:43.453963" level="INFO">${name} = controller-rest-clust-cars-perf-tell-txt-010-Crud-Mdsal-Perf</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:54:43.453397" elapsed="0.000605"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:54:43.457142" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:54:43.454251" elapsed="0.002929"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:54:43.457709" level="INFO">${date} = 2026-04-25 23:54:43.458</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:54:43.457407" elapsed="0.000342"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-04-25T23:54:43.461469" level="INFO">${timestamp} = 1777161283.458</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-04-25T23:54:43.458177" elapsed="0.003324"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-04-25T23:54:43.461563" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T23:54:43.461881" level="INFO">${target_file} = cluster_rest_script.log--controller-rest-clust-cars-perf-tell-txt-010-Crud-Mdsal-Perf.1777161283.458.log</msg>
<var>${target_file}</var>
<arg>cluster_rest_script.log</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-04-25T23:54:43.450095" elapsed="0.011815"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:54:43.470602" level="INFO">Executing command 'cat cluster_rest_script.log'.</msg>
<msg time="2026-04-25T23:54:43.484506" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:54:43.484777" level="INFO">${output_log} = 2026-04-25 23:49:41,096 INFO: Add 10000 purchase(s) to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)</msg>
<var>${output_log}</var>
<arg>cat ${source_file_name}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:54:43.470443" elapsed="0.014394"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:54:43.485839" level="INFO">2026-04-25 23:49:41,096 INFO: Add 10000 purchase(s) to 10.30.171.37,10.30.171.80,10.30.170.188:8181 (1 per request)</msg>
<arg>${output_log}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:54:43.485193" elapsed="0.000750"/>
</kw>
<kw name="Create File" owner="OperatingSystem">
<msg time="2026-04-25T23:54:43.487137" level="INFO" html="true">Created file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script.log--controller-rest-clust-cars-perf-tell-txt-010-Crud-Mdsal-Perf.1777161283.458.log"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script.log--controller-rest-clust-cars-perf-tell-txt-010-Crud-Mdsal-Perf.1777161283.458.log&lt;/a&gt;'.</msg>
<arg>${target_file_name}</arg>
<arg>${output_log}</arg>
<doc>Creates a file with the given content and encoding.</doc>
<status status="PASS" start="2026-04-25T23:54:43.486371" elapsed="0.000910"/>
</kw>
<arg>cluster_rest_script.log</arg>
<arg>${target_file}</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-25T23:54:43.470029" elapsed="0.017384"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:43.505552" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:43.508322" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:43.508611" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:43.489744" elapsed="0.018958"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:43.542787" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:43.542910" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:43.509191" elapsed="0.033746"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:43.543633" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:43.543183" elapsed="0.000551">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:43.489009" elapsed="0.054854">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:44.553726" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:44.554000" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:44.554181" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:44.545653" elapsed="0.008566"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:44.557947" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:44.558067" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:44.554452" elapsed="0.003651"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:44.558953" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:44.558379" elapsed="0.000670">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:44.544731" elapsed="0.014466">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:45.568506" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:45.568810" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:45.569074" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:45.560963" elapsed="0.008150"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:45.572840" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:45.572959" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:45.569349" elapsed="0.003644"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:45.573813" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:45.573271" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:45.560055" elapsed="0.014000">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:46.584489" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:46.584827" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:46.585045" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:46.575827" elapsed="0.009257"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:46.589570" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:46.589741" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:46.585396" elapsed="0.004400"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:46.590851" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:46.590104" elapsed="0.000853">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:46.574895" elapsed="0.016215">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:47.600513" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:47.600820" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:47.601081" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:47.593021" elapsed="0.008099"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:47.604842" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:47.604962" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:47.601357" elapsed="0.003642"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:47.605826" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:47.605280" elapsed="0.000644">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:47.592009" elapsed="0.014061">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:48.615714" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:48.615989" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:48.616177" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:48.607770" elapsed="0.008446"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:48.620289" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:48.620416" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:48.616464" elapsed="0.003988"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:48.621325" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:48.620777" elapsed="0.000654">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:48.606912" elapsed="0.014685">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:49.630842" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:49.631107" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:49.631379" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:49.623395" elapsed="0.008023"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:49.635463" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:49.635585" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:49.631655" elapsed="0.003966"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:49.636491" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:49.635943" elapsed="0.000645">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:49.622442" elapsed="0.014318">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:50.645947" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:50.646344" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:50.646624" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:50.638533" elapsed="0.008185"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:50.651086" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:50.651203" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:50.647093" elapsed="0.004145"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:50.652123" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:50.651518" elapsed="0.000700">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:50.637590" elapsed="0.014773">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:51.662014" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:51.662279" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:51.662540" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:51.654191" elapsed="0.008388"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:51.666357" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:51.666487" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:51.662841" elapsed="0.003681"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:51.667358" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:51.666835" elapsed="0.000620">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:51.653230" elapsed="0.014374">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:52.676889" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:52.677156" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:52.677339" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:52.669417" elapsed="0.007958"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:52.681470" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:52.681592" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:52.677611" elapsed="0.004016"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:52.682455" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:52.681932" elapsed="0.000618">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:52.668470" elapsed="0.014245">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:53.692275" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:53.692615" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:53.692890" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:53.684464" elapsed="0.008466"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:53.696663" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:53.696804" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:53.693166" elapsed="0.003673"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:53.697634" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:53.697117" elapsed="0.000632">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:53.683543" elapsed="0.014354">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:54.707241" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:54.707508" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:54.707725" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:54.699819" elapsed="0.007956"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:54.711588" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:54.711743" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:54.708036" elapsed="0.003752"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:54.712638" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:54.712113" elapsed="0.000649">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:54.698848" elapsed="0.014064">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:55.722842" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:55.723100" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:55.723350" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:55.714935" elapsed="0.008453"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:55.727440" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:55.727567" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:55.723622" elapsed="0.003980"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:55.728420" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:55.727900" elapsed="0.000614">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:55.713841" elapsed="0.014819">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:56.738578" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:56.738901" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:56.739088" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:56.730567" elapsed="0.008559"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:56.742986" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:56.743112" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:56.739407" elapsed="0.003740"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:56.744062" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:56.743470" elapsed="0.000695">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:56.729567" elapsed="0.014754">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:57.753442" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:57.753733" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:57.753997" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:57.746139" elapsed="0.007896"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:57.757879" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:57.758000" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:57.754272" elapsed="0.003763"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:57.758865" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:57.758318" elapsed="0.000646">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:57.745222" elapsed="0.013890">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:58.768748" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:58.769147" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:58.769428" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:58.760912" elapsed="0.008575"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:58.774461" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:58.774606" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:58.769929" elapsed="0.004714"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:58.775478" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:58.774954" elapsed="0.000622">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:58.759997" elapsed="0.015746">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:54:59.786032" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:54:59.786294" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:54:59.786554" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:54:59.777481" elapsed="0.009112"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:54:59.790307" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:54:59.790425" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:54:59.786850" elapsed="0.003609"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:54:59.791283" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:54:59.790762" elapsed="0.000619">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:54:59.776569" elapsed="0.014958">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:00.800818" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:00.801095" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:00.801285" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:00.793180" elapsed="0.008144"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:00.805279" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:00.805401" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:00.801608" elapsed="0.003829"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:00.806315" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:00.805775" elapsed="0.000641">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:00.792300" elapsed="0.014268">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:01.815875" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:01.816138" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:01.816394" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:01.808303" elapsed="0.008130"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:01.820429" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:01.820549" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:01.816668" elapsed="0.003917"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:01.821403" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:01.820886" elapsed="0.000612">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:01.807408" elapsed="0.014235">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:02.831181" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:02.831442" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:02.831621" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:02.823367" elapsed="0.008291"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:02.836934" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:02.837130" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:02.831920" elapsed="0.005266"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:02.838498" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:02.837654" elapsed="0.000996">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:02.822443" elapsed="0.016469">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:03.848919" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:03.849198" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:03.849481" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:03.840844" elapsed="0.008676"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:03.853492" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:03.853710" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:03.849841" elapsed="0.003919"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:03.854589" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:03.854054" elapsed="0.000675">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:03.839870" elapsed="0.015029">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:04.864176" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:04.864437" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:04.864616" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:04.856720" elapsed="0.007935"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:04.868717" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:04.868838" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:04.864912" elapsed="0.003961"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:04.869661" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:04.869144" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:04.855794" elapsed="0.014129">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:05.879314" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:05.879583" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:05.879881" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:05.871838" elapsed="0.008083"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:05.883717" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:05.883838" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:05.880214" elapsed="0.003658"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:05.884756" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:05.884207" elapsed="0.000649">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:05.870828" elapsed="0.014185">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:06.894239" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:06.894522" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:06.894731" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:06.886759" elapsed="0.008011"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:06.898523" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:06.898641" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:06.895005" elapsed="0.003691"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:06.899500" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:06.898978" elapsed="0.000618">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:06.885877" elapsed="0.013884">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:07.908226" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:07.908491" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:07.908772" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:07.901493" elapsed="0.007318"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:07.912894" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:07.913015" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:07.909045" elapsed="0.004005"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:07.913863" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:07.913325" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:07.900585" elapsed="0.013525">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:08.922449" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:08.922736" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:08.922918" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:08.915922" elapsed="0.007034"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:08.926657" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:08.926795" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:08.923188" elapsed="0.003642"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:08.927632" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:08.927105" elapsed="0.000644">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:08.914965" elapsed="0.012931">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:09.937148" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:09.937410" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:09.937695" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:09.929786" elapsed="0.007950"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:09.941478" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:09.941597" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:09.937970" elapsed="0.003662"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:09.942450" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:09.941929" elapsed="0.000616">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:09.928824" elapsed="0.013888">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:10.952164" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:10.952567" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:10.952890" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:10.944479" elapsed="0.008471"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:10.957588" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:10.957739" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:10.953316" elapsed="0.004460"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:10.958577" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:10.958056" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:10.943543" elapsed="0.015304">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:11.968170" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:11.968453" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:11.968739" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:11.960730" elapsed="0.008049"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:11.972598" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:11.972753" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:11.969013" elapsed="0.003786"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:11.973602" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:11.973083" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:11.959813" elapsed="0.014078">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:12.983181" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:12.983472" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:12.983655" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:12.975704" elapsed="0.008011"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:12.987386" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:12.987507" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:12.983951" elapsed="0.003590"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:12.988361" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:12.987838" elapsed="0.000619">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:12.974749" elapsed="0.013853">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:13.997277" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:13.997545" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:13.997848" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:13.990427" elapsed="0.007462"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:14.002070" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:14.002191" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:13.998122" elapsed="0.004103"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:14.003086" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:14.002507" elapsed="0.000675">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:13.989431" elapsed="0.013899">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:15.012391" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:15.012655" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:15.012864" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:15.005168" elapsed="0.007733"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:15.016664" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:15.016803" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:15.013162" elapsed="0.003676"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:15.017710" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:15.017153" elapsed="0.000659">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:15.004200" elapsed="0.013760">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:16.025656" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:16.026007" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:16.026299" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:16.019298" elapsed="0.007042"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:16.030454" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:16.030585" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:16.026612" elapsed="0.004009"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:16.031524" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:16.030941" elapsed="0.000688">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:16.018649" elapsed="0.013168">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:17.041263" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:17.041660" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:17.041977" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:17.033622" elapsed="0.008415"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:17.046569" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:17.046712" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:17.042402" elapsed="0.004347"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:17.047571" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:17.047042" elapsed="0.000645">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:17.032725" elapsed="0.015111">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:18.056792" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:18.057070" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:18.057332" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:18.049699" elapsed="0.007671"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:18.061125" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:18.061243" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:18.057612" elapsed="0.003666"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:18.062156" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:18.061563" elapsed="0.000692">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:18.048732" elapsed="0.013673">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:19.077798" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:19.078069" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:19.078250" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:19.064184" elapsed="0.014103"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:19.082074" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:19.082192" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:19.078523" elapsed="0.003710"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:19.083145" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:19.082575" elapsed="0.000667">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:19.063263" elapsed="0.020123">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:20.092852" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:20.093266" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:20.093804" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:20.085256" elapsed="0.008616"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:20.099134" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:20.099256" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:20.094243" elapsed="0.005048"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:20.100115" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:20.099568" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:20.084261" elapsed="0.016095">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:21.109158" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:21.109440" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:21.109641" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:21.102104" elapsed="0.007598"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:21.113623" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:21.113766" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:21.109969" elapsed="0.003850"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:21.114934" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:21.114234" elapsed="0.000801">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:21.101175" elapsed="0.014019">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:22.124534" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:22.124974" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:22.125406" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:22.117055" elapsed="0.008415"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:22.131422" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:22.131636" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:22.125889" elapsed="0.005846"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:22.133097" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:22.132167" elapsed="0.001078">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:22.116156" elapsed="0.017319">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:23.142917" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:23.143179" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:23.143361" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:23.135330" elapsed="0.008068"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:23.147426" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:23.147546" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:23.143655" elapsed="0.003925"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:23.148417" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:23.147898" elapsed="0.000614">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:23.134387" elapsed="0.014270">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:24.158358" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:24.158817" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:24.159220" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:24.150523" elapsed="0.008758"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:24.163579" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:24.163736" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:24.159652" elapsed="0.004124"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:24.164617" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:24.164060" elapsed="0.000690">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:24.149521" elapsed="0.015386">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:25.174142" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:25.174411" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:25.174592" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:25.166853" elapsed="0.007777"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:25.178421" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:25.178540" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:25.174887" elapsed="0.003687"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:25.179395" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:25.178875" elapsed="0.000618">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:25.165923" elapsed="0.013718">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:26.189116" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:26.189519" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:26.190053" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:26.181438" elapsed="0.008685"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:26.194725" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:26.194883" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:26.190494" elapsed="0.004424"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:26.195781" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:26.195198" elapsed="0.000717">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:26.180494" elapsed="0.015598">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:27.205192" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:27.205588" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:27.205996" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:27.197950" elapsed="0.008113"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:27.212086" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:27.212277" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:27.206435" elapsed="0.005896"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:27.213602" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:27.212789" elapsed="0.000997">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:27.196993" elapsed="0.017029">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:28.223758" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:28.224230" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:28.224727" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:28.215954" elapsed="0.008840"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:28.231107" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:28.231351" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:28.225261" elapsed="0.006146"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:28.232235" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:28.231839" elapsed="0.000478">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:28.214960" elapsed="0.017481">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:29.241137" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:29.241405" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:29.241586" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:29.234349" elapsed="0.007272"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:29.245805" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:29.245927" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:29.241880" elapsed="0.004081"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:29.246773" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:29.246234" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:29.233282" elapsed="0.013741">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:30.256009" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:30.256290" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:30.256588" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:30.248882" elapsed="0.007745"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:30.260689" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:30.260890" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:30.256908" elapsed="0.004027"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:30.261811" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:30.261239" elapsed="0.000674">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:30.247886" elapsed="0.014184">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:31.270615" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:31.271126" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:31.271430" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:31.263780" elapsed="0.007710"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:31.276321" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:31.276440" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:31.271919" elapsed="0.004555"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:31.277318" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:31.276777" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:31.262906" elapsed="0.014661">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:32.286900" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:32.287122" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:32.287337" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:32.279292" elapsed="0.008074"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:32.290698" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:32.290792" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:32.287571" elapsed="0.003246"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:32.291478" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:32.291037" elapsed="0.000515">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:32.278461" elapsed="0.013205">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:33.300466" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:33.300775" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:33.300971" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:33.293306" elapsed="0.007703"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:33.305202" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:33.305326" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:33.301253" elapsed="0.004109"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:33.306254" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:33.305655" elapsed="0.000703">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:33.292437" elapsed="0.014091">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:34.316005" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:34.316274" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:34.316547" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:34.308481" elapsed="0.008107"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:34.320475" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:34.320599" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:34.316849" elapsed="0.003784"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:34.321478" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:34.320940" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:34.307454" elapsed="0.014297">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:35.331184" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:35.331594" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:35.331962" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:35.323532" elapsed="0.008500"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:35.337960" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:35.338083" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:35.332466" elapsed="0.005652"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:35.338939" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:35.338394" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:35.322568" elapsed="0.016617">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:36.348429" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:36.348736" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:36.349007" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:36.341147" elapsed="0.007898"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:36.352916" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:36.353059" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:36.349284" elapsed="0.003820"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:36.354076" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:36.353455" elapsed="0.000725">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:36.340130" elapsed="0.014232">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:37.363585" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:37.363876" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:37.364062" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:37.356234" elapsed="0.007866"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:37.367968" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:37.368093" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:37.364342" elapsed="0.003785"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:37.368951" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:37.368412" elapsed="0.000670">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:37.355281" elapsed="0.013950">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:38.377796" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:38.378056" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:38.378320" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:38.370974" elapsed="0.007383"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:38.382432" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:38.382552" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:38.378592" elapsed="0.003995"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:38.383405" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:38.382886" elapsed="0.000613">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:38.370077" elapsed="0.013567">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:39.393039" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:39.393453" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:39.393787" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:39.385494" elapsed="0.008355"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:39.398168" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:39.398323" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:39.394270" elapsed="0.004087"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:39.399207" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:39.398649" elapsed="0.000664">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:39.384515" elapsed="0.014954">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:40.408934" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:40.409222" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:40.409527" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:40.401393" elapsed="0.008174"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:40.413499" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:40.413646" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:40.409834" elapsed="0.003893"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:40.414559" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:40.414020" elapsed="0.000681">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:40.400424" elapsed="0.014499">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:41.424173" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:41.424580" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:41.424902" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:41.416792" elapsed="0.008170"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:41.430219" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:41.430341" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:41.425330" elapsed="0.005046"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:41.431210" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:41.430657" elapsed="0.000650">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:41.415879" elapsed="0.015595">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:42.440244" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:42.440516" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:42.440803" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:42.433303" elapsed="0.007539"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:42.444557" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:42.444696" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:42.441075" elapsed="0.003658"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:42.445525" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:42.445010" elapsed="0.000620">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:42.432391" elapsed="0.013408">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:43.455062" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:43.455430" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:43.455611" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:43.447550" elapsed="0.008098"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:43.459401" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:43.459519" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:43.455905" elapsed="0.003648"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:43.460373" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:43.459854" elapsed="0.000618">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:43.446632" elapsed="0.014005">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:44.469513" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:44.469808" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:44.470068" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:44.462463" elapsed="0.007643"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:44.474156" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:44.474275" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:44.470341" elapsed="0.003968"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:44.475131" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:44.474589" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:44.461519" elapsed="0.013852">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:45.484419" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:45.484888" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:45.485235" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:45.477085" elapsed="0.008215"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:45.491864" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:45.492072" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:45.485774" elapsed="0.006357"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:45.493479" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:45.492583" elapsed="0.001051">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:45.476192" elapsed="0.017941">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:46.502864" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:46.503291" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:46.503703" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:46.495949" elapsed="0.007819"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:46.508874" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:46.508995" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:46.504135" elapsed="0.004894"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:46.509841" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:46.509308" elapsed="0.000629">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:46.495044" elapsed="0.015042">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:47.519052" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:47.519450" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:47.519655" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:47.511852" elapsed="0.007862"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:47.523950" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:47.524073" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:47.519951" elapsed="0.004157"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:47.525029" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:47.524393" elapsed="0.000746">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:47.510967" elapsed="0.014323">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:48.534981" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:48.535380" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:48.535853" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:48.527085" elapsed="0.008831"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:48.539829" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:48.539950" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:48.536283" elapsed="0.003701"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:48.540795" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:48.540259" elapsed="0.000631">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:48.526157" elapsed="0.014881">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:49.550625" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:49.550916" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:49.551098" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:49.542857" elapsed="0.008278"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:49.554822" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:49.554942" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:49.551368" elapsed="0.003610"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:49.555795" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:49.555252" elapsed="0.000641">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:49.541904" elapsed="0.014154">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:50.565557" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:50.565849" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:50.566116" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:50.557888" elapsed="0.008266"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:50.570253" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:50.570373" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:50.566396" elapsed="0.004010"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:50.571287" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:50.570701" elapsed="0.000686">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:50.557015" elapsed="0.014519">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:51.580801" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:51.581071" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:51.581291" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:51.573293" elapsed="0.008037"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:51.585102" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:51.585243" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:51.581590" elapsed="0.003691"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:51.586109" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:51.585563" elapsed="0.000644">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:51.572337" elapsed="0.014018">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:52.595858" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:52.596121" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:52.596376" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:52.588079" elapsed="0.008335"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:52.600126" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:52.600244" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:52.596647" elapsed="0.003633"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:52.601095" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:52.600553" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:52.587199" elapsed="0.014137">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:53.610461" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:53.610790" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:53.610971" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:53.603164" elapsed="0.007844"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:53.615136" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:53.615257" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:53.611241" elapsed="0.004051"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:53.616107" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:53.615568" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:53.602153" elapsed="0.014218">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:54.625475" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:54.625962" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:54.626383" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:54.618086" elapsed="0.008361"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:54.631063" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:54.631193" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:54.626944" elapsed="0.004291"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:54.632094" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:54.631527" elapsed="0.000675">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:54.617209" elapsed="0.015175">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:55.641663" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:55.641990" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:55.642179" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:55.634247" elapsed="0.007969"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:55.646650" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:55.646801" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:55.642486" elapsed="0.004352"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:55.647764" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:55.647145" elapsed="0.000725">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:55.633312" elapsed="0.014719">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:56.657329" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:56.657811" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:56.658242" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:56.649878" elapsed="0.008440"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:56.664705" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:56.664849" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:56.658764" elapsed="0.006125"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:56.665755" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:56.665185" elapsed="0.000671">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:56.648927" elapsed="0.017084">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:57.675175" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:57.675439" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:57.675619" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:57.667812" elapsed="0.007844"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:57.679388" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:57.679506" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:57.675918" elapsed="0.003622"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:57.680355" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:57.679837" elapsed="0.000628">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:57.666893" elapsed="0.013719">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:58.689376" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:58.689637" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:58.689920" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:58.682423" elapsed="0.007536"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:58.693720" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:58.693842" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:58.690193" elapsed="0.003685"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:58.694721" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:58.694156" elapsed="0.000667">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:58.681497" elapsed="0.013476">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:55:59.703329" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:55:59.703595" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:55:59.703804" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:55:59.696814" elapsed="0.007028"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:55:59.707909" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:55:59.708032" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:55:59.704073" elapsed="0.003994"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:55:59.708884" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:55:59.708346" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:55:59.695837" elapsed="0.013291">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:00.717878" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:00.718119" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:00.718333" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:00.710989" elapsed="0.007372"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:00.721195" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:00.721280" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:00.718554" elapsed="0.002750"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:00.721948" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:00.721523" elapsed="0.000532">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:00.710037" elapsed="0.012136">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:01.731193" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:01.731497" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:01.731707" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:01.724028" elapsed="0.007720"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:01.735525" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:01.735646" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:01.731992" elapsed="0.003717"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:01.736561" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:01.736002" elapsed="0.000657">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:01.723109" elapsed="0.013729">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:02.745766" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:02.746180" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:02.746574" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:02.738501" elapsed="0.008134"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:02.751276" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:02.751399" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:02.747092" elapsed="0.004342"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:02.752254" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:02.751735" elapsed="0.000614">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:02.737620" elapsed="0.014877">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:03.762350" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:03.762630" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:03.762854" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:03.754395" elapsed="0.008496"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:03.766704" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:03.766825" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:03.763143" elapsed="0.003716"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:03.767770" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:03.767154" elapsed="0.000725">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:03.753385" elapsed="0.014704">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:04.777293" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:04.777555" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:04.777841" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:04.769991" elapsed="0.007890"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:04.781641" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:04.781780" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:04.778117" elapsed="0.003698"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:04.782615" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:04.782100" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:04.769032" elapsed="0.013854">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:05.790340" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:05.790610" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:05.790826" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:05.784215" elapsed="0.006648"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:05.795920" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:05.796053" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:05.791103" elapsed="0.004987"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:05.797079" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:05.796397" elapsed="0.000801">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:05.783546" elapsed="0.013819">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:06.806393" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:06.806658" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:06.806945" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:06.799223" elapsed="0.007760"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:06.810802" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:06.810928" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:06.807220" elapsed="0.003744"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:06.811829" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:06.811256" elapsed="0.000674">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:06.798247" elapsed="0.013839">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:07.821124" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:07.821395" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:07.821578" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:07.813887" elapsed="0.007729"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:07.825425" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:07.825543" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:07.821910" elapsed="0.003668"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:07.826438" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:07.825888" elapsed="0.000651">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:07.812944" elapsed="0.013782">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:08.835217" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:08.835483" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:08.835764" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:08.828416" elapsed="0.007387"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:08.839887" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:08.840009" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:08.836035" elapsed="0.004010"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:08.840864" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:08.840322" elapsed="0.000638">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:08.827526" elapsed="0.013582">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:09.850228" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:09.850497" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:09.850704" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:09.842968" elapsed="0.007776"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:09.856501" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:09.856725" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:09.851016" elapsed="0.005767"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:09.858120" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:09.857217" elapsed="0.001062">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:09.841968" elapsed="0.016562">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:10.867946" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:10.868366" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:10.868829" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:10.860413" elapsed="0.008483"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:10.874082" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:10.874201" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:10.869305" elapsed="0.004930"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:10.875077" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:10.874524" elapsed="0.000656">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:10.859469" elapsed="0.015897">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:11.884072" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:11.884333" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:11.884513" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:11.877161" elapsed="0.007389"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:11.888612" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:11.888754" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:11.884802" elapsed="0.003987"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:11.889585" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:11.889065" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:11.876255" elapsed="0.013656">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:12.899137" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:12.899537" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:12.900039" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:12.891812" elapsed="0.008293"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:12.904410" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:12.904528" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:12.900536" elapsed="0.004026"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:12.905428" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:12.904901" elapsed="0.000622">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:12.890920" elapsed="0.014770">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:13.914503" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:13.914966" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:13.915268" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:13.907359" elapsed="0.007972"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:13.919858" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:13.919979" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:13.915756" elapsed="0.004259"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:13.920924" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:13.920367" elapsed="0.000656">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:13.906464" elapsed="0.014705">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:14.931060" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:14.931450" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:14.931808" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:14.922963" elapsed="0.008892"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:14.936791" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:14.936960" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:14.932161" elapsed="0.004850"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:14.938210" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:14.937388" elapsed="0.000940">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:14.921921" elapsed="0.016549">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:15.948156" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:15.948486" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:15.948667" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:15.940459" elapsed="0.008271"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:15.952775" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:15.952897" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:15.949050" elapsed="0.003881"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:15.953806" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:15.953230" elapsed="0.000676">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:15.939420" elapsed="0.014673">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:16.963262" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:16.963547" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:16.963844" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:16.955994" elapsed="0.007889"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:16.967699" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:16.967822" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:16.964137" elapsed="0.003719"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:16.968840" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:16.968139" elapsed="0.000799">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:16.955075" elapsed="0.014013">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:17.978235" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:17.978664" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:17.978992" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:17.970922" elapsed="0.008249"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:17.983414" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:17.983564" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:17.979536" elapsed="0.004071"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:17.984433" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:17.983914" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:17.969965" elapsed="0.014756">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:18.993141" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:18.993410" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:18.993698" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:18.986611" elapsed="0.007129"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:18.997481" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:18.997600" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:18.993973" elapsed="0.003661"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:18.998455" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:18.997935" elapsed="0.000615">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:18.985653" elapsed="0.013067">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:20.007694" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:20.007966" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:20.008232" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:20.000544" elapsed="0.007731"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:20.012345" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:20.012483" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:20.008515" elapsed="0.004002"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:20.013417" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:20.012844" elapsed="0.000676">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:19.999548" elapsed="0.014162">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:21.024328" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:21.024649" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:21.024997" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:21.015628" elapsed="0.009410"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:21.029253" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:21.029373" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:21.025303" elapsed="0.004105"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:21.030285" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:21.029753" elapsed="0.000649">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:21.014637" elapsed="0.015939">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:22.040256" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:22.040652" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:22.040976" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:22.032791" elapsed="0.008244"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:22.045040" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:22.045178" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:22.041534" elapsed="0.003679"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:22.046038" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:22.045495" elapsed="0.000653">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:22.031774" elapsed="0.014526">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:23.055224" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:23.055631" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:23.056050" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:23.048100" elapsed="0.008011"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:23.060969" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:23.061089" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:23.056479" elapsed="0.004645"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:23.061972" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:23.061400" elapsed="0.000673">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:23.047184" elapsed="0.015034">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:24.070993" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:24.071261" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:24.071441" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:24.064083" elapsed="0.007395"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:24.075516" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:24.075636" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:24.071728" elapsed="0.003963"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:24.076480" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:24.075968" elapsed="0.000608">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:24.063132" elapsed="0.013616">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:25.085582" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:25.085879" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:25.086141" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:25.078595" elapsed="0.007584"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:25.089895" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:25.090015" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:25.086412" elapsed="0.003638"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:25.090900" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:25.090325" elapsed="0.000671">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:25.077607" elapsed="0.013537">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:26.100161" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:26.100561" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:26.100876" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:26.092932" elapsed="0.008005"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:26.106873" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:26.107065" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:26.101302" elapsed="0.005865"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:26.108161" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:26.107594" elapsed="0.000663">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:26.092000" elapsed="0.016402">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:27.117802" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:27.118077" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:27.118364" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:27.110181" elapsed="0.008222"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:27.122487" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:27.122607" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:27.118639" elapsed="0.004002"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:27.123523" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:27.122992" elapsed="0.000625">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:27.109241" elapsed="0.014552">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:28.133035" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:28.133463" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:28.133785" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:28.125660" elapsed="0.008187"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:28.139946" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:28.140160" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:28.134216" elapsed="0.005999"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:28.141298" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:28.140645" elapsed="0.000751">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:28.124726" elapsed="0.016821">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:29.150502" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:29.150905" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:29.151170" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:29.143341" elapsed="0.007870"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:29.155033" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:29.155152" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:29.151453" elapsed="0.003733"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:29.156048" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:29.155464" elapsed="0.000679">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:29.142404" elapsed="0.013896">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:30.165525" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:30.165916" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:30.166132" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:30.158400" elapsed="0.007770"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:30.170630" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:30.170857" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:30.166416" elapsed="0.004497"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:30.172193" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:30.171343" elapsed="0.001000">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:30.157425" elapsed="0.015152">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:31.181803" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:31.182209" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:31.182715" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:31.174327" elapsed="0.008453"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:31.187279" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:31.187399" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:31.183148" elapsed="0.004285"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:31.188283" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:31.187758" elapsed="0.000619">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:31.173430" elapsed="0.015093">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:32.197846" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:32.198274" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:32.198633" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:32.190362" elapsed="0.008371"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:32.202692" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:32.202814" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:32.199020" elapsed="0.003829"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:32.203643" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:32.203126" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:32.189404" elapsed="0.014518">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:33.212721" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:33.212991" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:33.213245" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:33.205759" elapsed="0.007524"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:33.218470" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:33.218592" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:33.213539" elapsed="0.005087"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:33.219453" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:33.218932" elapsed="0.000617">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:33.204786" elapsed="0.014935">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:34.229180" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:34.229491" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:34.229699" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:34.221642" elapsed="0.008097"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:34.233548" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:34.233710" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:34.229975" elapsed="0.003774"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:34.234590" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:34.234041" elapsed="0.000678">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:34.220570" elapsed="0.014313">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:35.244299" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:35.244593" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:35.244882" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:35.236907" elapsed="0.008014"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:35.248851" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:35.248979" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:35.245176" elapsed="0.003838"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:35.249886" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:35.249295" elapsed="0.000696">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:35.235876" elapsed="0.014267">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:36.259783" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:36.260187" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:36.260408" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:36.252305" elapsed="0.008140"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:36.264527" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:36.264649" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:36.260699" elapsed="0.004005"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:36.265500" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:36.264987" elapsed="0.000607">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:36.251241" elapsed="0.014524">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:37.274662" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:37.275111" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:37.275389" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:37.267523" elapsed="0.007903"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:37.279196" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:37.279327" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:37.275660" elapsed="0.003701"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:37.280176" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:37.279636" elapsed="0.000633">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:37.266602" elapsed="0.013813">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:38.288788" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:38.289173" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:38.289357" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:38.281631" elapsed="0.007763"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:38.293301" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:38.293427" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:38.289630" elapsed="0.003834"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:38.294340" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:38.293786" elapsed="0.000653">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:38.281142" elapsed="0.013446">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:39.304291" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:39.304560" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:39.304880" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:39.296513" elapsed="0.008406"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:39.309052" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:39.309173" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:39.305156" elapsed="0.004052"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:39.310057" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:39.309509" elapsed="0.000647">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:39.295460" elapsed="0.014844">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:40.319198" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:40.319469" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:40.319653" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:40.312098" elapsed="0.007615"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:40.323525" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:40.323644" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:40.319953" elapsed="0.003746"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:40.324510" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:40.323988" elapsed="0.000620">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:40.311147" elapsed="0.013635">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:41.334240" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:41.334713" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:41.335117" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:41.326722" elapsed="0.008455"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:41.339805" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:41.339929" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:41.335548" elapsed="0.004417"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:41.340830" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:41.340252" elapsed="0.000681">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:41.325763" elapsed="0.015324">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:42.349881" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:42.350277" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:42.350558" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:42.342817" elapsed="0.007799"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:42.355700" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:42.355822" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:42.351018" elapsed="0.004839"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:42.356663" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:42.356147" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:42.341940" elapsed="0.014989">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:43.363989" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:43.364338" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:43.364711" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:43.358192" elapsed="0.006568"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:43.369598" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:43.369769" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:43.365073" elapsed="0.004733"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:43.370661" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:43.370119" elapsed="0.000666">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:43.357530" elapsed="0.013411">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:44.380514" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:44.380952" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:44.381238" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:44.372962" elapsed="0.008334"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:44.386322" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:44.386443" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:44.381702" elapsed="0.004775"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:44.387304" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:44.386782" elapsed="0.000619">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:44.371950" elapsed="0.015600">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:45.395945" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:45.396213" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:45.396490" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:45.389343" elapsed="0.007186"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:45.400700" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:45.400823" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:45.396784" elapsed="0.004073"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:45.401693" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:45.401145" elapsed="0.000648">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:45.388412" elapsed="0.013532">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:46.409801" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:46.410108" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:46.410309" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:46.403645" elapsed="0.006701"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:46.414262" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:46.414386" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:46.410613" elapsed="0.003808"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:46.415252" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:46.414728" elapsed="0.000674">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:46.402838" elapsed="0.012721">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:47.424184" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:47.424606" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:47.425049" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:47.417363" elapsed="0.007752"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:47.430349" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:47.430468" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:47.425517" elapsed="0.004985"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:47.431360" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:47.430805" elapsed="0.000654">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:47.416368" elapsed="0.015245">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:48.440407" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:48.440697" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:48.440883" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:48.433344" elapsed="0.007577"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:48.445054" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:48.445175" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:48.441154" elapsed="0.004056"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:48.446036" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:48.445492" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:48.432426" elapsed="0.013855">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:49.455304" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:49.455612" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:49.455897" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:49.448084" elapsed="0.007851"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:49.459620" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:49.459761" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:49.456166" elapsed="0.003630"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:49.460598" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:49.460073" elapsed="0.001620">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:49.447189" elapsed="0.014656">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:50.472714" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:50.473163" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:50.473478" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:50.463616" elapsed="0.009926"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:50.479833" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:50.479954" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:50.473980" elapsed="0.006007"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:50.480811" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:50.480271" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:50.462648" elapsed="0.018411">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:51.491114" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:51.491704" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:51.492105" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:51.482987" elapsed="0.009168"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:51.496460" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:51.496590" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:51.492460" elapsed="0.004166"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:51.497524" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:51.496987" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:51.481964" elapsed="0.015870">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:52.506846" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:52.507113" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:52.507325" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:52.499628" elapsed="0.007746"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:52.511206" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:52.511352" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:52.507705" elapsed="0.003687"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:52.512249" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:52.511712" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:52.498636" elapsed="0.013867">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:53.521721" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:53.522001" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:53.522263" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:53.514423" elapsed="0.007877"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:53.526030" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:53.526150" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:53.522537" elapsed="0.003648"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:53.526998" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:53.526459" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:53.513355" elapsed="0.013889">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:54.536803" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:54.537086" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:54.537274" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:54.529124" elapsed="0.008186"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:54.541519" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:54.541640" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:54.537555" elapsed="0.004141"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:54.542494" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:54.541976" elapsed="0.000614">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:54.528183" elapsed="0.014612">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:55.551424" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:55.551733" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:55.552037" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:55.544509" elapsed="0.007567"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:55.555885" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:55.556006" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:55.552310" elapsed="0.003730"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:55.556865" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:55.556319" elapsed="0.000644">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:55.543537" elapsed="0.013574">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:56.565642" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:56.565953" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:56.566140" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:56.558838" elapsed="0.007339"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:56.569891" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:56.570011" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:56.566408" elapsed="0.003638"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:56.570854" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:56.570318" elapsed="0.000631">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:56.557962" elapsed="0.013133">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:57.579945" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:57.580417" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:57.580823" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:57.572907" elapsed="0.007955"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:57.584925" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:57.585047" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:57.581096" elapsed="0.003986"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:57.585894" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:57.585356" elapsed="0.000633">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:57.571969" elapsed="0.014327">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:58.595311" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:58.595741" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:58.596028" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:58.588130" elapsed="0.007957"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:58.600132" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:58.600252" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:58.596591" elapsed="0.003696"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:58.601137" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:58.600594" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:58.587174" elapsed="0.014207">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:56:59.610025" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:56:59.610419" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:56:59.610832" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:56:59.603116" elapsed="0.007777"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:56:59.615812" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:56:59.615943" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:56:59.611261" elapsed="0.004716"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:56:59.616826" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:56:59.616257" elapsed="0.000666">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:56:59.602229" elapsed="0.014840">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:00.626144" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:00.626541" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:00.626864" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:00.618900" elapsed="0.008025"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:00.632198" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:00.632319" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:00.627290" elapsed="0.005064"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:00.633215" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:00.632639" elapsed="0.000671">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:00.617958" elapsed="0.015498">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:01.642496" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:01.642912" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:01.643201" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:01.635294" elapsed="0.007968"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:01.647763" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:01.647901" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:01.643544" elapsed="0.004397"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:01.648925" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:01.648275" elapsed="0.000760">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:01.634344" elapsed="0.014883">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:02.659015" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:02.659461" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:02.659790" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:02.651324" elapsed="0.008528"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:02.664495" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:02.664614" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:02.660274" elapsed="0.004373"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:02.665518" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:02.664959" elapsed="0.000664">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:02.650259" elapsed="0.015536">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:03.674597" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:03.674903" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:03.675169" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:03.667617" elapsed="0.007590"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:03.679333" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:03.679454" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:03.675447" elapsed="0.004041"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:03.680438" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:03.679795" elapsed="0.000757">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:03.666624" elapsed="0.014116">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:04.689429" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:04.689878" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:04.690202" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:04.682626" elapsed="0.007638"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:04.696025" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:04.696149" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:04.690635" elapsed="0.005549"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:04.697051" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:04.696467" elapsed="0.000688">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:04.681587" elapsed="0.015720">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:05.707136" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:05.707469" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:05.707789" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:05.699231" elapsed="0.008598"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:05.711904" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:05.712069" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:05.708070" elapsed="0.004051"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:05.713007" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:05.712425" elapsed="0.000692">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:05.698235" elapsed="0.015037">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:06.722273" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:06.722873" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:06.723111" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:06.715166" elapsed="0.007984"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:06.727922" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:06.728055" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:06.723577" elapsed="0.004514"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:06.729186" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:06.728618" elapsed="0.000668">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:06.714172" elapsed="0.015265">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:07.738354" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:07.738645" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:07.738955" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:07.731384" elapsed="0.007612"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:07.743326" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:07.743475" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:07.739298" elapsed="0.004215"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:07.744507" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:07.743887" elapsed="0.000804">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:07.730373" elapsed="0.014481">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:08.753653" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:08.754114" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:08.754395" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:08.746650" elapsed="0.007804"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:08.758807" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:08.758930" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:08.754890" elapsed="0.004074"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:08.759799" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:08.759243" elapsed="0.000655">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:08.745753" elapsed="0.014294">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:09.768350" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:09.768619" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:09.768900" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:09.761810" elapsed="0.007128"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:09.774046" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:09.774167" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:09.769172" elapsed="0.005030"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:09.775015" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:09.774475" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:09.760914" elapsed="0.014344">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:10.784484" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:10.784775" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:10.784957" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:10.777130" elapsed="0.007863"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:10.788726" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:10.788847" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:10.785230" elapsed="0.003651"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:10.789695" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:10.789158" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:10.776143" elapsed="0.013799">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:11.799171" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:11.799440" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:11.799724" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:11.791740" elapsed="0.008024"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:11.803582" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:11.803740" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:11.799997" elapsed="0.003780"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:11.804590" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:11.804057" elapsed="0.000696">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:11.790818" elapsed="0.014097">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:12.812250" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:12.812616" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:12.812868" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:12.806210" elapsed="0.006696"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:12.817970" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:12.818131" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:12.813189" elapsed="0.004988"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:12.819100" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:12.818470" elapsed="0.000766">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:12.805582" elapsed="0.013868">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:13.827989" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:13.828251" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:13.828507" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:13.821188" elapsed="0.007357"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:13.832251" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:13.832369" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:13.828797" elapsed="0.003607"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:13.833233" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:13.832698" elapsed="0.000630">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:13.820285" elapsed="0.013190">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:14.840860" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:14.841162" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:14.841353" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:14.835101" elapsed="0.006291"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:14.846847" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:14.846983" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:14.841651" elapsed="0.005373"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:14.847850" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:14.847307" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:14.834452" elapsed="0.013641">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:15.856450" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:15.856746" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:15.857016" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:15.849898" elapsed="0.007156"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:15.861302" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:15.861428" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:15.857292" elapsed="0.004172"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:15.862367" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:15.861786" elapsed="0.000696">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:15.848978" elapsed="0.013664">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:16.872086" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:16.872383" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:16.872572" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:16.864873" elapsed="0.007735"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:16.876398" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:16.876509" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:16.872893" elapsed="0.003649"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:16.877337" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:16.876840" elapsed="0.000591">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:16.863721" elapsed="0.013858">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:17.886504" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:17.886986" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:17.887433" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:17.879344" elapsed="0.008151"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:17.891529" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:17.891649" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:17.887900" elapsed="0.003804"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:17.892510" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:17.891985" elapsed="0.000622">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:17.878381" elapsed="0.014395">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:18.901841" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:18.902261" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:18.902560" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:18.894497" elapsed="0.008138"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:18.907625" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:18.907796" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:18.903055" elapsed="0.004778"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:18.908713" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:18.908136" elapsed="0.000682">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:18.893594" elapsed="0.015384">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:19.918167" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:19.918525" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:19.918809" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:19.910836" elapsed="0.008012"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:19.922616" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:19.922757" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:19.919103" elapsed="0.003690"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:19.923590" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:19.923070" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:19.909871" elapsed="0.013985">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:20.932381" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:20.932717" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:20.932912" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:20.925737" elapsed="0.007213"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:20.936980" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:20.937107" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:20.933197" elapsed="0.003946"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:20.938007" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:20.937439" elapsed="0.000668">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:20.924848" elapsed="0.013417">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:21.947597" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:21.947889" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:21.948155" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:21.940164" elapsed="0.008029"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:21.952342" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:21.952462" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:21.948433" elapsed="0.004064"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:21.953352" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:21.952806" elapsed="0.000646">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:21.939179" elapsed="0.014434">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:22.962102" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:22.962379" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:22.962566" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:22.955276" elapsed="0.007328"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:22.966510" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:22.966642" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:22.962878" elapsed="0.003819"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:22.967567" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:22.967003" elapsed="0.000690">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:22.954380" elapsed="0.013483">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:23.976647" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:23.977083" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:23.977476" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:23.969612" elapsed="0.007926"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:23.981730" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:23.981850" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:23.977939" elapsed="0.003945"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:23.982718" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:23.982177" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:23.968743" elapsed="0.014226">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:24.991802" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:24.992073" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:24.992258" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:24.984855" elapsed="0.007439"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:24.996523" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:24.996649" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:24.992537" elapsed="0.004168"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:24.997508" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:24.996987" elapsed="0.000616">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:24.983895" elapsed="0.013878">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:26.006650" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:26.007264" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:26.007663" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:25.999544" elapsed="0.008189"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:26.011840" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:26.011972" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:26.008002" elapsed="0.004007"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:26.012899" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:26.012313" elapsed="0.000688">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:25.998527" elapsed="0.014636">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:27.022908" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:27.023364" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:27.023785" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:27.015182" elapsed="0.008654"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:27.027732" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:27.027855" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:27.024127" elapsed="0.003763"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:27.028716" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:27.028174" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:27.014130" elapsed="0.014837">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:28.037881" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:28.038155" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:28.038450" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:28.030657" elapsed="0.007853"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:28.042645" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:28.042786" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:28.038803" elapsed="0.004018"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:28.043615" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:28.043098" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:28.029790" elapsed="0.014094">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:29.052855" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:29.053214" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:29.053432" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:29.045656" elapsed="0.007818"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:29.057964" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:29.058084" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:29.053788" elapsed="0.004330"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:29.058936" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:29.058400" elapsed="0.000633">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:29.044818" elapsed="0.014363">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:30.068543" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:30.069024" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:30.069297" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:30.060982" elapsed="0.008354"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:30.073192" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:30.073321" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:30.069573" elapsed="0.003783"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:30.074223" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:30.073655" elapsed="0.000671">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:30.060028" elapsed="0.014455">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:31.080849" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:31.081054" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:31.081190" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:31.075726" elapsed="0.005490"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:31.084206" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:31.084292" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:31.081389" elapsed="0.002928"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:31.085033" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:31.084553" elapsed="0.000555">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:31.075202" elapsed="0.010018">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:32.092474" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:32.092816" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:32.093117" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:32.086549" elapsed="0.006605"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:32.097001" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:32.097113" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:32.093425" elapsed="0.003721"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:32.097959" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:32.097426" elapsed="0.000632">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:32.085896" elapsed="0.012315">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:33.107079" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:33.107346" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:33.107528" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:33.100046" elapsed="0.007519"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:33.111471" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:33.111596" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:33.107825" elapsed="0.003804"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:33.112467" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:33.111938" elapsed="0.000630">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:33.099109" elapsed="0.013636">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:34.121655" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:34.122099" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:34.122487" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:34.114460" elapsed="0.008087"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:34.127265" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:34.127386" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:34.122952" elapsed="0.004468"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:34.128421" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:34.127754" elapsed="0.000769">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:34.113565" elapsed="0.015137">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:35.137400" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:35.137843" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:35.138127" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:35.130513" elapsed="0.007674"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:35.143181" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:35.143308" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:35.138582" elapsed="0.004762"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:35.144219" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:35.143655" elapsed="0.000663">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:35.129574" elapsed="0.014898">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:36.153141" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:36.153532" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:36.153979" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:36.146168" elapsed="0.007874"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:36.158923" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:36.159044" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:36.154413" elapsed="0.004666"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:36.159901" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:36.159356" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:36.145292" elapsed="0.014865">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:37.167897" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:37.168167" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:37.168351" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:37.161945" elapsed="0.006442"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:37.172505" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:37.172661" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:37.168637" elapsed="0.004085"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:37.173596" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:37.173003" elapsed="0.000716">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:37.161030" elapsed="0.012841">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:38.182529" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:38.182824" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:38.183088" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:38.175662" elapsed="0.007465"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:38.187017" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:38.187179" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:38.183362" elapsed="0.003865"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:38.188087" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:38.187529" elapsed="0.000656">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:38.174782" elapsed="0.013555">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:39.197691" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:39.197963" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:39.198145" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:39.190395" elapsed="0.007787"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:39.201909" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:39.202030" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:39.198417" elapsed="0.003647"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:39.202889" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:39.202347" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:39.189254" elapsed="0.013880">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:40.212359" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:40.212793" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:40.213179" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:40.204952" elapsed="0.008290"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:40.218502" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:40.218628" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:40.213612" elapsed="0.005051"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:40.219491" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:40.218971" elapsed="0.000616">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:40.204060" elapsed="0.015700">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:41.228498" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:41.228795" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:41.228979" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:41.221553" elapsed="0.007463"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:41.232774" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:41.232894" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:41.229250" elapsed="0.003678"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:41.233756" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:41.233214" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:41.220622" elapsed="0.013387">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:42.242848" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:42.243112" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:42.243489" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:42.235941" elapsed="0.007591"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:42.247542" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:42.247721" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:42.243808" elapsed="0.003952"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:42.248718" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:42.248060" elapsed="0.000767">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:42.234914" elapsed="0.014101">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:43.257561" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:43.257847" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:43.258029" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:43.250823" elapsed="0.007243"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:43.262108" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:43.262227" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:43.258304" elapsed="0.003957"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:43.263091" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:43.262540" elapsed="0.000649">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:43.249893" elapsed="0.013443">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:44.271824" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:44.272091" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:44.272377" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:44.265110" elapsed="0.007308"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:44.276156" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:44.276310" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:44.272656" elapsed="0.003691"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:44.277162" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:44.276623" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:44.264182" elapsed="0.013227">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:45.284395" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:45.284658" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:45.284885" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:45.278750" elapsed="0.006174"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:45.288649" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:45.288787" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:45.285157" elapsed="0.003676"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:45.289638" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:45.289119" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:45.278092" elapsed="0.011818">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:46.298861" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:46.299296" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:46.299759" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:46.291648" elapsed="0.008178"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:46.310636" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:46.311954" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:46.300234" elapsed="0.011782"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:46.314347" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:46.312537" elapsed="0.001919">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:46.290785" elapsed="0.023836">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:47.323412" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:47.323708" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:47.323899" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:47.316501" elapsed="0.007435"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:47.327716" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:47.327836" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:47.324171" elapsed="0.003700"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:47.328694" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:47.328152" elapsed="0.000641">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:47.315559" elapsed="0.013382">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:48.337858" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:48.338128" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:48.338416" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:48.330831" elapsed="0.007628"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:48.342214" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:48.342331" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:48.338722" elapsed="0.003643"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:48.343237" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:48.342710" elapsed="0.000628">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:48.329822" elapsed="0.013688">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:49.352407" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:49.352853" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:49.353134" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:49.345273" elapsed="0.007917"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:49.358362" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:49.358481" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:49.353590" elapsed="0.004924"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:49.359368" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:49.358818" elapsed="0.000648">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:49.344352" elapsed="0.015262">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:50.368408" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:50.368732" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:50.368998" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:50.361351" elapsed="0.007685"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:50.372797" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:50.372917" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:50.369267" elapsed="0.003684"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:50.373759" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:50.373226" elapsed="0.000630">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:50.360446" elapsed="0.013558">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:51.382985" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:51.383380" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:51.383660" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:51.375623" elapsed="0.008133"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:51.387752" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:51.387875" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:51.384187" elapsed="0.003723"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:51.388743" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:51.388203" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:51.374784" elapsed="0.014202">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:52.398950" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:52.399355" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:52.399775" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:52.390845" elapsed="0.008993"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:52.406736" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:52.406945" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:52.400214" elapsed="0.006790"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:52.408411" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:52.407493" elapsed="0.001127">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:52.389918" elapsed="0.018990">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:53.417523" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:53.417820" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:53.418006" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:53.410715" elapsed="0.007328"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:53.421862" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:53.421982" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:53.418278" elapsed="0.003739"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:53.422847" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:53.422301" elapsed="0.000645">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:53.409826" elapsed="0.013271">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:54.431970" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:54.432239" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:54.432503" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:54.424907" elapsed="0.007635"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:54.436445" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:54.436574" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:54.432801" elapsed="0.003809"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:54.437449" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:54.436920" elapsed="0.000629">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:54.423977" elapsed="0.013777">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:55.446483" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:55.446781" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:55.446966" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:55.439565" elapsed="0.007438"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:55.451125" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:55.451245" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:55.447237" elapsed="0.004043"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:55.452111" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:55.451558" elapsed="0.000648">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:55.438643" elapsed="0.013717">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:56.461575" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:56.461878" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:56.462138" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:56.454115" elapsed="0.008061"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:56.466048" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:56.466166" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:56.462411" elapsed="0.003789"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:56.467043" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:56.466481" elapsed="0.000658">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:56.453225" elapsed="0.014061">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:57.476277" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:57.476540" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:57.476759" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:57.469102" elapsed="0.007697"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:57.480572" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:57.480711" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:57.477031" elapsed="0.003716"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:57.481557" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:57.481035" elapsed="0.000623">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:57.468176" elapsed="0.013653">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:58.490915" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:58.491180" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:58.491446" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:58.483607" elapsed="0.007879"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:58.497480" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:58.497705" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:58.491786" elapsed="0.005980"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:58.499204" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:58.498214" elapsed="0.001144">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:58.482654" elapsed="0.016941">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:57:59.506844" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:57:59.507122" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:57:59.507296" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:57:59.501055" elapsed="0.006277"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:57:59.510173" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:57:59.510258" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:57:59.507556" elapsed="0.002727"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:57:59.510896" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:57:59.510493" elapsed="0.000476">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:57:59.500420" elapsed="0.010661">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:00.520141" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:00.520415" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:00.520697" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:00.512909" elapsed="0.007855"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:00.524824" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:00.524948" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:00.521008" elapsed="0.003975"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:00.525853" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:00.525272" elapsed="0.000681">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:00.511933" elapsed="0.014170">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:01.534953" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:01.535353" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:01.535632" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:01.527857" elapsed="0.007867"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:01.541998" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:01.542085" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:01.536100" elapsed="0.006010"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:01.542712" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:01.542317" elapsed="0.000471">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:01.526956" elapsed="0.015938">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:02.551696" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:02.552120" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:02.552513" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:02.544657" elapsed="0.007916"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:02.558646" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:02.558846" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:02.552984" elapsed="0.005896"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:02.559702" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:02.559165" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:02.543735" elapsed="0.016218">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:03.568907" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:03.569192" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:03.569379" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:03.561771" elapsed="0.007647"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:03.573261" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:03.573388" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:03.569657" elapsed="0.003766"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:03.574276" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:03.573732" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:03.560828" elapsed="0.013696">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:04.583887" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:04.584158" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:04.584418" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:04.576364" elapsed="0.008092"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:04.588538" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:04.588658" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:04.584714" elapsed="0.003999"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:04.589533" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:04.589015" elapsed="0.000615">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:04.575369" elapsed="0.014445">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:05.598453" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:05.598773" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:05.598963" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:05.591529" elapsed="0.007472"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:05.602729" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:05.602850" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:05.599235" elapsed="0.003650"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:05.603701" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:05.603162" elapsed="0.000638">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:05.590547" elapsed="0.013399">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:06.612253" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:06.612516" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:06.612822" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:06.605720" elapsed="0.007142"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:06.616720" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:06.616852" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:06.613144" elapsed="0.003746"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:06.617756" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:06.617215" elapsed="0.000636">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:06.604782" elapsed="0.013218">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:07.627246" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:07.627727" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:07.628070" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:07.619856" elapsed="0.008274"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:07.634226" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:07.634346" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:07.628626" elapsed="0.005754"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:07.635216" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:07.634687" elapsed="0.000629">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:07.618929" elapsed="0.016571">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:08.643954" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:08.644219" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:08.644487" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:08.637283" elapsed="0.007243"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:08.648283" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:08.648402" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:08.644784" elapsed="0.003653"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:08.649292" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:08.648731" elapsed="0.000656">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:08.636331" elapsed="0.013387">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:09.658985" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:09.659261" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:09.659443" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:09.651738" elapsed="0.007743"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:09.663294" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:09.663414" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:09.659742" elapsed="0.003707"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:09.664292" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:09.663747" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:09.650527" elapsed="0.014010">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:10.673493" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:10.673783" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:10.674063" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:10.666364" elapsed="0.007744"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:10.678231" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:10.678351" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:10.674358" elapsed="0.004027"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:10.679223" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:10.678691" elapsed="0.000629">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:10.665436" elapsed="0.014037">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:11.688042" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:11.688341" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:11.688598" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:11.681205" elapsed="0.007435"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:11.692802" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:11.692941" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:11.688962" elapsed="0.004016"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:11.693902" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:11.693303" elapsed="0.000701">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:11.680309" elapsed="0.013854">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:12.702656" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:12.702951" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:12.703208" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:12.695896" elapsed="0.007350"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:12.707051" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:12.707175" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:12.703478" elapsed="0.003731"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:12.708043" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:12.707498" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:12.694997" elapsed="0.013291">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:13.717070" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:13.717463" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:13.717776" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:13.710041" elapsed="0.007796"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:13.722401" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:13.722550" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:13.718180" elapsed="0.004420"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:13.723507" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:13.722945" elapsed="0.000667">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:13.709158" elapsed="0.014635">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:14.732614" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:14.733051" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:14.733435" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:14.725502" elapsed="0.007994"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:14.737907" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:14.738029" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:14.733901" elapsed="0.004175"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:14.738908" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:14.738354" elapsed="0.000652">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:14.724606" elapsed="0.014548">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:15.747910" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:15.748174" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:15.748353" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:15.740946" elapsed="0.007444"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:15.752119" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:15.752239" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:15.748622" elapsed="0.003651"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:15.753173" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:15.752553" elapsed="0.000720">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:15.740048" elapsed="0.013374">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:16.762113" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:16.762403" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:16.762703" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:16.755369" elapsed="0.007374"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:16.767490" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:16.767779" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:16.762983" elapsed="0.004862"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:16.769277" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:16.768310" elapsed="0.001122">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:16.754277" elapsed="0.015585">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:17.778722" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:17.778986" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:17.779164" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:17.771603" elapsed="0.007598"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:17.782928" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:17.783047" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:17.779434" elapsed="0.003648"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:17.783922" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:17.783355" elapsed="0.000662">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:17.770748" elapsed="0.013415">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:18.793517" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:18.793948" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:18.794375" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:18.786195" elapsed="0.008243"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:18.800071" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:18.800195" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:18.794838" elapsed="0.005393"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:18.801086" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:18.800521" elapsed="0.000664">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:18.785268" elapsed="0.016079">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:19.810110" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:19.810378" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:19.810562" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:19.803274" elapsed="0.007325"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:19.814772" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:19.814897" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:19.810877" elapsed="0.004054"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:19.815763" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:19.815217" elapsed="0.000645">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:19.802375" elapsed="0.013636">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:20.826351" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:20.826965" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:20.827506" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:20.817809" elapsed="0.009783"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:20.832172" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:20.832304" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:20.828139" elapsed="0.004202"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:20.833221" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:20.832640" elapsed="0.000682">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:20.816876" elapsed="0.016611">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:21.841887" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:21.842148" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:21.842381" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:21.835255" elapsed="0.007168"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:21.846282" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:21.846404" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:21.842655" elapsed="0.003785"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:21.847339" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:21.846742" elapsed="0.000698">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:21.834310" elapsed="0.013278">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:22.856409" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:22.856704" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:22.856970" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:22.849282" elapsed="0.007725"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:22.862152" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:22.862273" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:22.857239" elapsed="0.005069"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:22.863175" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:22.862624" elapsed="0.000651">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:22.848376" elapsed="0.015048">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:23.871769" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:23.872040" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:23.872219" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:23.865172" elapsed="0.007084"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:23.876104" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:23.876223" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:23.872486" elapsed="0.003771"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:23.877078" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:23.876534" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:23.864260" elapsed="0.013061">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:24.885793" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:24.886057" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:24.886311" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:24.879078" elapsed="0.007272"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:24.890061" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:24.890181" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:24.886584" elapsed="0.003632"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:24.891182" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:24.890494" elapsed="0.000786">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:24.878192" elapsed="0.013235">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:25.900402" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:25.900833" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:25.901123" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:25.893187" elapsed="0.007994"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:25.906279" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:25.906414" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:25.901620" elapsed="0.004832"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:25.907470" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:25.906845" elapsed="0.000727">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:25.892277" elapsed="0.015509">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:26.914302" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:26.914782" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:26.915252" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:26.908864" elapsed="0.006449"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:26.921743" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:26.921882" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:26.915788" elapsed="0.006130"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:26.922814" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:26.922226" elapsed="0.000698">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:26.908364" elapsed="0.014733">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:27.932551" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:27.932918" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:27.933106" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:27.925024" elapsed="0.008119"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:27.937243" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:27.937385" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:27.933461" elapsed="0.003960"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:27.938357" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:27.937773" elapsed="0.000684">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:27.924010" elapsed="0.014610">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:28.947320" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:28.947754" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:28.948146" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:28.940323" elapsed="0.007884"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:28.952880" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:28.953003" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:28.948576" elapsed="0.004462"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:28.953917" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:28.953372" elapsed="0.000641">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:28.939414" elapsed="0.014749">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:29.963637" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:29.963978" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:29.964182" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:29.956736" elapsed="0.007497"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:29.968289" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:29.968415" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:29.964494" elapsed="0.003956"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:29.969362" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.968773" elapsed="0.000717">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:29.955449" elapsed="0.014201">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:30.977829" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:30.978107" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:30.978380" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:30.971341" elapsed="0.007079"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:30.982632" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:30.982782" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:30.978690" elapsed="0.004129"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:30.983662" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.983113" elapsed="0.000673">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:30.970449" elapsed="0.013549">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:31.992460" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:31.992752" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:31.992933" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:31.985753" elapsed="0.007217"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:31.997021" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:31.997143" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:31.993201" elapsed="0.003977"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:31.998034" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.997453" elapsed="0.000678">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:31.984851" elapsed="0.013427">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:33.007199" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:33.007597" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:33.008018" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:33.000027" elapsed="0.008053"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:33.012851" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:33.012971" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:33.008452" elapsed="0.004555"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:33.013825" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:33.013282" elapsed="0.000683">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:32.999138" elapsed="0.014976">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:34.022907" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:34.023307" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:34.023595" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:34.015810" elapsed="0.007847"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:34.028633" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:34.028776" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:34.024077" elapsed="0.004733"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:34.029610" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.029094" elapsed="0.000635">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:34.014953" elapsed="0.014928">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:35.039058" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:35.039336" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:35.039693" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:35.031932" elapsed="0.007826"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:35.044216" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:35.044345" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:35.040055" elapsed="0.004326"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:35.045247" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.044679" elapsed="0.000667">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:35.030896" elapsed="0.014606">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:36.054768" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:36.055223" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:36.055512" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:36.047992" elapsed="0.007580"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:36.059449" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:36.059569" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:36.055925" elapsed="0.003679"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:36.060429" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.059909" elapsed="0.000616">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:36.047025" elapsed="0.013656">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:37.069557" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:37.069854" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:37.070118" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:37.062601" elapsed="0.007555"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:37.074142" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:37.074267" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:37.070390" elapsed="0.003913"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:37.075492" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.074618" elapsed="0.000989">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:37.061682" elapsed="0.014116">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:38.084846" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:38.085135" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:38.085322" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:38.077865" elapsed="0.007506"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:38.089652" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:38.089800" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:38.085615" elapsed="0.004221"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:38.090664" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.090138" elapsed="0.000650">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:38.076951" elapsed="0.013990">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:39.100474" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:39.100870" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:39.101244" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:39.092755" elapsed="0.008549"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:39.107370" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:39.107558" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:39.101676" elapsed="0.005937"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:39.108972" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:39.108059" elapsed="0.000995">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:39.091853" elapsed="0.017312">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:40.117573" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:40.117874" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:40.118064" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:40.111021" elapsed="0.007082"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:40.122086" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:40.122211" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:40.118370" elapsed="0.003877"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:40.123147" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:40.122580" elapsed="0.000666">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:40.110159" elapsed="0.013240">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:41.132416" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:41.132856" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:41.133320" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:41.125328" elapsed="0.008053"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:41.138188" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:41.138319" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:41.133806" elapsed="0.004550"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:41.139245" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:41.138653" elapsed="0.000694">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:41.124395" elapsed="0.015113">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:42.148404" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:42.148790" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:42.149063" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:42.141373" elapsed="0.007742"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:42.153764" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:42.153917" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:42.149428" elapsed="0.004530"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:42.155001" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:42.154325" elapsed="0.000801">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:42.140372" elapsed="0.014947">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:43.163511" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:43.163835" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:43.164122" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:43.157177" elapsed="0.006994"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:43.168130" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:43.168252" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:43.164421" elapsed="0.003867"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:43.169279" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:43.168570" elapsed="0.000807">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:43.156256" elapsed="0.013269">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:44.178006" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:44.178279" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:44.178475" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:44.171378" elapsed="0.007134"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:44.182748" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:44.182870" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:44.178777" elapsed="0.004128"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:44.183780" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:44.183191" elapsed="0.000700">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:44.170468" elapsed="0.013573">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:45.192243" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:45.192507" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:45.192795" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:45.185853" elapsed="0.006981"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:45.196605" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:45.196758" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:45.193065" elapsed="0.003729"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:45.197623" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:45.197070" elapsed="0.000676">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:45.184966" elapsed="0.012931">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:46.206905" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:46.207182" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:46.207403" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:46.200010" elapsed="0.007432"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:46.211179" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:46.211352" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:46.207703" elapsed="0.003694"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:46.212240" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:46.211703" elapsed="0.000637">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:46.198896" elapsed="0.013597">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:47.221702" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:47.222026" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:47.222304" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:47.214468" elapsed="0.007879"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:47.226564" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:47.226734" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:47.222588" elapsed="0.004186"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:47.227647" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:47.227064" elapsed="0.000709">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:47.213438" elapsed="0.014488">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:48.236399" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:48.236706" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:48.236899" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:48.229661" elapsed="0.007277"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:48.240920" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:48.241047" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:48.237182" elapsed="0.003902"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:48.241939" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:48.241374" elapsed="0.000665">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:48.228820" elapsed="0.013373">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:49.251487" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:49.251787" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:49.252056" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:49.244131" elapsed="0.007965"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:49.255989" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:49.256112" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:49.252368" elapsed="0.003779"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:49.257006" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:49.256439" elapsed="0.000668">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:49.243092" elapsed="0.014166">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:50.265164" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:50.265459" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:50.265631" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:50.258865" elapsed="0.006801"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:50.269726" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:50.269837" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:50.265918" elapsed="0.003951"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:50.270648" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:50.270139" elapsed="0.000623">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:50.258025" elapsed="0.012881">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:51.278599" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:51.278890" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:51.279160" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:51.272870" elapsed="0.006329"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:51.282995" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:51.283117" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:51.279436" elapsed="0.003716"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:51.283994" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:51.283436" elapsed="0.000681">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:51.271774" elapsed="0.012521">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:52.293026" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:52.293291" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:52.293471" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:52.286116" elapsed="0.007391"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:52.297273" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:52.297390" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:52.293769" elapsed="0.003655"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:52.298275" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:52.297721" elapsed="0.000653">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:52.285207" elapsed="0.013314">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:53.305707" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:53.305936" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:53.306166" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:53.299973" elapsed="0.006222"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:53.310115" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:53.310240" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:53.306386" elapsed="0.003900"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:53.311193" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:53.310594" elapsed="0.000747">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:53.299272" elapsed="0.012232">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:54.320337" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:54.320605" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:54.320817" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:54.313354" elapsed="0.007509"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:54.324750" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:54.324892" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:54.321107" elapsed="0.003831"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:54.325917" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:54.325256" elapsed="0.000778">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:54.312310" elapsed="0.013943">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:55.335160" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:55.335434" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:55.335761" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:55.328029" elapsed="0.007773"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:55.339610" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:55.339756" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:55.336049" elapsed="0.003743"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:55.340595" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:55.340069" elapsed="0.000646">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:55.327095" elapsed="0.013772">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:56.349113" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:56.349384" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:56.349571" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:56.342793" elapsed="0.006816"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:56.353768" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:56.353894" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:56.349883" elapsed="0.004047"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:56.354788" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:56.354211" elapsed="0.000678">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:56.341793" elapsed="0.013327">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:57.363506" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:57.363827" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:57.364134" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:57.357546" elapsed="0.006630"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:57.368048" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:57.368173" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:57.364425" elapsed="0.003782"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:57.369026" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:57.368484" elapsed="0.000639">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:57.356525" elapsed="0.012744">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:58.378011" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:58.378276" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:58.378454" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:58.371087" elapsed="0.007405"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:58.382252" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:58.382370" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:58.378751" elapsed="0.003654"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:58.383220" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:58.382704" elapsed="0.000612">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:58.370155" elapsed="0.013308">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:58:59.391978" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:58:59.392254" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:58:59.392522" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:58:59.385156" elapsed="0.007407"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:58:59.398253" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:58:59.398382" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:58:59.392841" elapsed="0.005578"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:58:59.399292" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:58:59.398733" elapsed="0.000660">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:58:59.384279" elapsed="0.015307">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:00.407896" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:00.408251" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:00.408446" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:00.401349" elapsed="0.007136"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:00.412781" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:00.412949" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:00.408792" elapsed="0.004207"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:00.414154" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:00.413387" elapsed="0.000898">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:00.400421" elapsed="0.014065">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:01.424096" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:01.424498" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:01.424847" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:01.416289" elapsed="0.008597"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:01.428820" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:01.428948" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:01.425134" elapsed="0.003850"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:01.429850" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:01.429280" elapsed="0.000671">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:01.415320" elapsed="0.014786">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:02.438617" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:02.438918" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:02.439158" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:02.431836" elapsed="0.007378"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:02.442714" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:02.442804" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:02.439482" elapsed="0.003347"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:02.443441" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:02.443046" elapsed="0.000471">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:02.430950" elapsed="0.012688">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:03.452469" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:03.452913" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:03.453315" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:03.445356" elapsed="0.008018"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:03.457965" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:03.458084" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:03.453775" elapsed="0.004343"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:03.458941" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:03.458397" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:03.444461" elapsed="0.014728">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:04.467658" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:04.467954" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:04.468136" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:04.460968" elapsed="0.007205"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:04.471978" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:04.472099" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:04.468407" elapsed="0.003727"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:04.472990" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:04.472411" elapsed="0.000677">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:04.460055" elapsed="0.013180">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:05.481806" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:05.482069" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:05.482350" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:05.474958" elapsed="0.007431"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:05.486481" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:05.486604" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:05.482629" elapsed="0.004011"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:05.487468" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:05.486944" elapsed="0.000620">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:05.474041" elapsed="0.013693">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:06.496039" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:06.496308" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:06.496488" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:06.489796" elapsed="0.006729"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:06.501005" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:06.501183" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:06.496783" elapsed="0.004454"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:06.502432" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:06.501636" elapsed="0.000939">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:06.488751" elapsed="0.014072">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:07.511248" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:07.511546" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:07.511841" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:07.504599" elapsed="0.007291"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:07.516132" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:07.516257" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:07.512135" elapsed="0.004158"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:07.517152" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:07.516584" elapsed="0.000668">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:07.503741" elapsed="0.013666">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:08.526019" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:08.526306" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:08.526488" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:08.519234" elapsed="0.007292"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:08.530664" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:08.530806" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:08.526786" elapsed="0.004055"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:08.531629" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:08.531115" elapsed="0.000632">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:08.518310" elapsed="0.013586">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:09.540722" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:09.541008" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:09.541269" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:09.533757" elapsed="0.007551"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:09.545085" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:09.545204" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:09.541543" elapsed="0.003697"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:09.546064" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:09.545518" elapsed="0.000642">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:09.532787" elapsed="0.013521">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:10.555124" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:10.555387" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:10.555592" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:10.548130" elapsed="0.007501"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:10.559328" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:10.559446" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:10.555886" elapsed="0.003595"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:10.560322" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:10.559796" elapsed="0.000623">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:10.547174" elapsed="0.013393">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:11.569385" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:11.569829" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:11.570241" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:11.562529" elapsed="0.007774"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:11.574946" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:11.575069" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:11.570841" elapsed="0.004264"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:11.575933" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:11.575388" elapsed="0.000649">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:11.561517" elapsed="0.014671">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:12.585252" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:12.585541" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:12.585749" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:12.577915" elapsed="0.007877"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:12.589513" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:12.589632" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:12.586027" elapsed="0.003657"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:12.590481" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:12.589964" elapsed="0.000613">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:12.577016" elapsed="0.013728">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:13.599470" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:13.599906" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:13.600290" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:13.592562" elapsed="0.007789"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:13.604349" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:13.604486" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:13.600817" elapsed="0.003707"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:13.605375" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:13.604824" elapsed="0.000647">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:13.591588" elapsed="0.014030">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:14.614052" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:14.614320" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:14.614502" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:14.607358" elapsed="0.007182"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:14.618802" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:14.618925" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:14.614796" elapsed="0.004165"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:14.619871" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:14.619246" elapsed="0.000725">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:14.606434" elapsed="0.013689">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:15.629794" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:15.630193" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:15.630580" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:15.622644" elapsed="0.007995"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:15.634981" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:15.635112" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:15.631146" elapsed="0.004001"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:15.636043" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:15.635451" elapsed="0.000693">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:15.621008" elapsed="0.015300">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:16.646064" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:16.646397" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:16.646609" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:16.638068" elapsed="0.008578"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:16.650399" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:16.650520" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:16.646911" elapsed="0.003642"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:16.651374" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:16.650855" elapsed="0.000617">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:16.637176" elapsed="0.014445">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:17.661072" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:17.661345" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:17.661638" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:17.653600" elapsed="0.008110"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:17.665982" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:17.666123" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:17.661962" elapsed="0.004199"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:17.667041" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:17.666444" elapsed="0.000697">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:17.652521" elapsed="0.014772">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:18.676224" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:18.676748" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:18.677170" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:18.669116" elapsed="0.008098"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:18.681223" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:18.681348" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:18.677511" elapsed="0.003872"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:18.682280" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:18.681694" elapsed="0.000688">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:18.668172" elapsed="0.014365">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:19.691299" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:19.691559" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:19.691847" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:19.684242" elapsed="0.007643"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:19.695609" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:19.695747" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:19.692117" elapsed="0.003666"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:19.696601" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:19.696059" elapsed="0.000658">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:19.683343" elapsed="0.013521">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:20.705757" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:20.706160" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:20.706513" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:20.698590" elapsed="0.007985"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:20.711280" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:20.711399" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:20.706980" elapsed="0.004455"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:20.712288" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:20.711734" elapsed="0.000650">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:20.697652" elapsed="0.014880">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:21.722085" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:21.722515" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:21.722980" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:21.714395" elapsed="0.008651"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:21.729552" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:21.729787" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:21.723506" elapsed="0.006343"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:21.731163" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:21.730314" elapsed="0.000996">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:21.713373" elapsed="0.018219">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:22.740142" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:22.740417" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:22.740601" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:22.733461" elapsed="0.007176"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:22.744499" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:22.744622" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:22.740914" elapsed="0.003743"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:22.745494" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:22.744961" elapsed="0.000630">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:22.732492" elapsed="0.013274">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:23.755205" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:23.755578" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:23.755865" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:23.747567" elapsed="0.008337"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:23.759993" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:23.760115" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:23.756139" elapsed="0.004011"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:23.760975" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:23.760435" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:23.746589" elapsed="0.014628">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:24.770261" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:24.770572" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:24.770779" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:24.763064" elapsed="0.007753"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:24.774613" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:24.774753" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:24.771070" elapsed="0.003718"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:24.775592" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:24.775069" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:24.762075" elapsed="0.013785">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:25.784867" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:25.785138" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:25.785399" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:25.777784" elapsed="0.007653"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:25.789189" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:25.789306" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:25.785693" elapsed="0.003648"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:25.790206" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:25.789619" elapsed="0.000684">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:25.776750" elapsed="0.013700">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:26.799192" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:26.799598" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:26.799913" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:26.792219" elapsed="0.007753"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:26.805168" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:26.805286" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:26.800337" elapsed="0.004983"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:26.806159" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:26.805602" elapsed="0.000655">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:26.791308" elapsed="0.015093">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:27.815788" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:27.816122" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:27.816453" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:27.808353" elapsed="0.008143"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:27.820717" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:27.820864" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:27.816834" elapsed="0.004068"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:27.821931" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:27.821248" elapsed="0.000790">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:27.807346" elapsed="0.014863">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:28.831271" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:28.831545" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:28.831767" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:28.823999" elapsed="0.007808"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:28.835861" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:28.836008" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:28.832053" elapsed="0.003993"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:28.836925" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:28.836343" elapsed="0.000688">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:28.823089" elapsed="0.014097">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:29.845867" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:29.846134" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:29.846423" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:29.839015" elapsed="0.007447"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:29.850640" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:29.850786" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:29.846722" elapsed="0.004099"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:29.851635" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:29.851108" elapsed="0.000650">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:29.838085" elapsed="0.013830">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:30.858059" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:30.858263" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:30.858397" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:30.853428" elapsed="0.004995"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:30.861127" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:30.862176" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:30.858601" elapsed="0.003605"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:30.862812" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:30.862417" elapsed="0.000467">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:30.852728" elapsed="0.010262">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:31.871736" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:31.872008" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:31.872270" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:31.864787" elapsed="0.007521"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:31.876074" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:31.876193" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:31.872545" elapsed="0.003682"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:31.877054" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:31.876512" elapsed="0.000640">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:31.863850" elapsed="0.013496">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:32.885906" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:32.886169" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:32.886348" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:32.879063" elapsed="0.007322"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:32.890406" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:32.890529" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:32.886615" elapsed="0.003970"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:32.891393" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:32.890880" elapsed="0.000607">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:32.878171" elapsed="0.013462">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:33.900371" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:33.900831" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:33.901286" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:33.893425" elapsed="0.007924"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:33.905217" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:33.905337" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:33.901732" elapsed="0.003640"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:33.906195" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:33.905650" elapsed="0.000641">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:33.892467" elapsed="0.013970">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:34.914933" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:34.915201" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:34.915382" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:34.908202" elapsed="0.007216"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:34.919168" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:34.919287" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:34.915653" elapsed="0.003667"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:34.920145" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:34.919600" elapsed="0.000643">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:34.907269" elapsed="0.013120">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:35.929519" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:35.929838" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:35.930124" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:35.922162" elapsed="0.008003"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:35.935739" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:35.935873" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:35.930408" elapsed="0.005501"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:35.936757" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:35.936201" elapsed="0.000654">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:35.921236" elapsed="0.015770">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:36.946072" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:36.946529" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:36.946868" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:36.938786" elapsed="0.008143"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:36.951874" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:36.951995" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:36.947324" elapsed="0.004705"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:36.952871" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:36.952317" elapsed="0.000655">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:36.937892" elapsed="0.015257">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:37.961850" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:37.962111" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:37.962391" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:37.955139" elapsed="0.007291"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:37.966194" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:37.966311" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:37.962663" elapsed="0.003682"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:37.967166" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:37.966630" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:37.954088" elapsed="0.013326">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:38.976978" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:38.977336" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:38.977534" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:38.969496" elapsed="0.008076"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:38.981908" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:38.982057" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:38.977856" elapsed="0.004238"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:38.983022" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:38.982393" elapsed="0.000733">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:38.968335" elapsed="0.014945">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:39.991938" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:39.992333" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:39.992760" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:39.985022" elapsed="0.007804"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:39.996944" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:39.997062" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:39.993194" elapsed="0.003902"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:39.997931" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:39.997394" elapsed="0.000634">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:39.984126" elapsed="0.014051">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:41.006626" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:41.007141" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '1754'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:41.007469" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:41.000047" elapsed="0.007488"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:41.012296" level="INFO">24 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:41.012424" level="INFO">${count} = 24</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:41.007949" elapsed="0.004509"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:41.013280" level="FAIL">24.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:41.012762" elapsed="0.000615">24.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:40.999055" elapsed="0.014493">24.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:42.022305" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:42.024693" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '2513'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;30&lt;/car-id&gt;&lt;person-id&gt;30&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;31&lt;/car-id&gt;&lt;person-id&gt;31&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;29&lt;/car-id&gt;&lt;person-id&gt;29&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;32&lt;/car-id&gt;&lt;person-id&gt;32&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;33&lt;/car-id&gt;&lt;person-id&gt;33&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;34&lt;/car-id&gt;&lt;person-id&gt;34&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;35&lt;/car-id&gt;&lt;person-id&gt;35&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;25&lt;/car-id&gt;&lt;person-id&gt;25&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;26&lt;/car-id&gt;&lt;person-id&gt;26&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;27&lt;/car-id&gt;&lt;person-id&gt;27&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;28&lt;/car-id&gt;&lt;person-id&gt;28&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:42.025015" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:42.015595" elapsed="0.009472"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:42.030024" level="INFO">35 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:42.030181" level="INFO">${count} = 35</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:42.025561" elapsed="0.004658"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:42.031126" level="FAIL">35.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:42.030533" elapsed="0.000722">35.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:42.014421" elapsed="0.016999">35.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:43.038922" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:43.039220" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '2513'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;30&lt;/car-id&gt;&lt;person-id&gt;30&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;31&lt;/car-id&gt;&lt;person-id&gt;31&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;29&lt;/car-id&gt;&lt;person-id&gt;29&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;32&lt;/car-id&gt;&lt;person-id&gt;32&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;33&lt;/car-id&gt;&lt;person-id&gt;33&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;34&lt;/car-id&gt;&lt;person-id&gt;34&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;35&lt;/car-id&gt;&lt;person-id&gt;35&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;25&lt;/car-id&gt;&lt;person-id&gt;25&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;26&lt;/car-id&gt;&lt;person-id&gt;26&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;27&lt;/car-id&gt;&lt;person-id&gt;27&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;28&lt;/car-id&gt;&lt;person-id&gt;28&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:43.039414" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:43.033094" elapsed="0.006358"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:43.043366" level="INFO">35 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:43.043485" level="INFO">${count} = 35</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:43.039706" elapsed="0.003813"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:43.044340" level="FAIL">35.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:43.043823" elapsed="0.000612">35.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:43.032220" elapsed="0.012361">35.0 != 10000.0</status>
</kw>
<kw name="Purchase Is Completed">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:44.053723" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.054245" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/xml', 'Content-Length': '2513'} 
 body=&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;&lt;car-person&gt;&lt;car-id&gt;7&lt;/car-id&gt;&lt;person-id&gt;7&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;8&lt;/car-id&gt;&lt;person-id&gt;8&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;9&lt;/car-id&gt;&lt;person-id&gt;9&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;30&lt;/car-id&gt;&lt;person-id&gt;30&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;20&lt;/car-id&gt;&lt;person-id&gt;20&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;31&lt;/car-id&gt;&lt;person-id&gt;31&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;1&lt;/car-id&gt;&lt;person-id&gt;1&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;2&lt;/car-id&gt;&lt;person-id&gt;2&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;3&lt;/car-id&gt;&lt;person-id&gt;3&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;4&lt;/car-id&gt;&lt;person-id&gt;4&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;5&lt;/car-id&gt;&lt;person-id&gt;5&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;6&lt;/car-id&gt;&lt;person-id&gt;6&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;18&lt;/car-id&gt;&lt;person-id&gt;18&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;29&lt;/car-id&gt;&lt;person-id&gt;29&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;19&lt;/car-id&gt;&lt;person-id&gt;19&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;10&lt;/car-id&gt;&lt;person-id&gt;10&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;21&lt;/car-id&gt;&lt;person-id&gt;21&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;32&lt;/car-id&gt;&lt;person-id&gt;32&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;11&lt;/car-id&gt;&lt;person-id&gt;11&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;22&lt;/car-id&gt;&lt;person-id&gt;22&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;33&lt;/car-id&gt;&lt;person-id&gt;33&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;12&lt;/car-id&gt;&lt;person-id&gt;12&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;23&lt;/car-id&gt;&lt;person-id&gt;23&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;34&lt;/car-id&gt;&lt;person-id&gt;34&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;13&lt;/car-id&gt;&lt;person-id&gt;13&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;24&lt;/car-id&gt;&lt;person-id&gt;24&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;35&lt;/car-id&gt;&lt;person-id&gt;35&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;14&lt;/car-id&gt;&lt;person-id&gt;14&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;25&lt;/car-id&gt;&lt;person-id&gt;25&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;15&lt;/car-id&gt;&lt;person-id&gt;15&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;26&lt;/car-id&gt;&lt;person-id&gt;26&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;16&lt;/car-id&gt;&lt;person-id&gt;16&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;27&lt;/car-id&gt;&lt;person-id&gt;27&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;17&lt;/car-id&gt;&lt;person-id&gt;17&lt;/person-id&gt;&lt;/car-person&gt;&lt;car-person&gt;&lt;car-id&gt;28&lt;/car-id&gt;&lt;person-id&gt;28&lt;/person-id&gt;&lt;/car-person&gt;&lt;/car-people&gt; 
 </msg>
<msg time="2026-04-25T23:59:44.054698" level="INFO">${rsp} = &lt;Response [200]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>headers=${ACCEPT_XML}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:44.046407" elapsed="0.008358"/>
</kw>
<kw name="Get Element Count" owner="XML">
<msg time="2026-04-25T23:59:44.058659" level="INFO">35 elements matched 'car-person'.</msg>
<msg time="2026-04-25T23:59:44.058801" level="INFO">${count} = 35</msg>
<var>${count}</var>
<arg>${rsp.content}</arg>
<arg>xpath=car-person</arg>
<doc>Returns and logs how many elements the given ``xpath`` matches.</doc>
<status status="PASS" start="2026-04-25T23:59:44.055065" elapsed="0.003770"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.059633" level="FAIL">35.0 != 10000.0</msg>
<arg>${count}</arg>
<arg>${item_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-25T23:59:44.059115" elapsed="0.000633">35.0 != 10000.0</status>
</kw>
<arg>${ITEM_COUNT}</arg>
<doc>Check purchase of 10000 is completed.</doc>
<status status="FAIL" start="2026-04-25T23:59:44.045389" elapsed="0.014509">35.0 != 10000.0</status>
</kw>
<msg time="2026-04-25T23:59:44.060045" level="FAIL">Keyword 'Purchase Is Completed' failed after retrying for 5 minutes. The last error was: 35.0 != 10000.0</msg>
<arg>${PROCEDURE_TIMEOUT}</arg>
<arg>1</arg>
<arg>Purchase Is Completed</arg>
<arg>${ITEM_COUNT}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T23:54:43.487846" elapsed="300.572329">Keyword 'Purchase Is Completed' failed after retrying for 5 minutes. The last error was: 35.0 != 10000.0</status>
</kw>
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-25T23:54:41.102776" elapsed="302.957625">Keyword 'Purchase Is Completed' failed after retrying for 5 minutes. The last error was: 35.0 != 10000.0</status>
</test>
<test id="s1-s2-t7" name="Delete Cars" line="96">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:59:44.065796" elapsed="0.000377"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:59:44.065283" elapsed="0.001193"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.067826" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.067692" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.067645" elapsed="0.000260"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.072536" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.072427" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.072409" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.073625" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:44.073219" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.074184" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:44.073856" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:44.074256" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:59:44.074420" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:44.072844" elapsed="0.001601"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.079726" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.079598" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.079580" elapsed="0.000217"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.080995" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.080886" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.080869" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.081512" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.081203" elapsed="0.000336"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.081971" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.081710" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.127730" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.082484" elapsed="0.045561"/>
</kw>
<msg time="2026-04-25T23:59:44.128443" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.128512" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.082152" elapsed="0.046413"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.174359" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.129645" elapsed="0.045073"/>
</kw>
<msg time="2026-04-25T23:59:44.174969" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.175039" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.128947" elapsed="0.046152"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.175712" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.175309" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.175265" elapsed="0.000635"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.176633" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.176113" elapsed="0.000655"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.177242" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.176868" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.176841" elapsed="0.000522"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.177420" elapsed="0.000060"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.181143" elapsed="0.000162"/>
</kw>
<msg time="2026-04-25T23:59:44.181371" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.179774" elapsed="0.001740"/>
</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="NOT RUN" start="2026-04-25T23:59:44.181877" elapsed="0.000086"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.182222" elapsed="0.000117"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.179021" elapsed="0.003441"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.177999" elapsed="0.004535"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.080555" elapsed="0.102079"/>
</kw>
<msg time="2026-04-25T23:59:44.182812" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.182869" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.079947" elapsed="0.102962"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.183144" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.183030" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.183010" elapsed="0.000221"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.183713" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.184096" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.184171" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.079253" elapsed="0.105225"/>
</kw>
<msg time="2026-04-25T23:59:44.184585" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.184632" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.074846" elapsed="0.109844"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.185026" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.184771" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.184753" elapsed="0.000398"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:44.074705" elapsed="0.110471"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.190799" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.190682" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.190648" elapsed="0.000269"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.192198" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.192086" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.192068" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.192733" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.192406" elapsed="0.000355"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.193169" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.192912" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.241613" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.193701" elapsed="0.048035"/>
</kw>
<msg time="2026-04-25T23:59:44.241931" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.241980" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.193353" elapsed="0.048665"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.287760" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.242538" elapsed="0.045343"/>
</kw>
<msg time="2026-04-25T23:59:44.288056" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.288104" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.242190" elapsed="0.045953"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.288462" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.288226" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.288205" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.289025" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.288704" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.289379" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.289167" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.289148" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.289490" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.292164" elapsed="0.000149"/>
</kw>
<msg time="2026-04-25T23:59:44.292374" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.291009" elapsed="0.001498"/>
</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="NOT RUN" start="2026-04-25T23:59:44.292817" elapsed="0.000107"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.293254" elapsed="0.000144"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.290368" elapsed="0.003147"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.289815" elapsed="0.003764"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.191771" elapsed="0.101930"/>
</kw>
<msg time="2026-04-25T23:59:44.293812" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.293859" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.191069" elapsed="0.102829"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.294094" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.293982" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.293962" elapsed="0.000259"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.294613" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.294966" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.295038" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.190308" elapsed="0.104838"/>
</kw>
<msg time="2026-04-25T23:59:44.295241" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.295285" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.185460" elapsed="0.109863"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.295643" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.295398" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.295381" elapsed="0.000356"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:44.185319" elapsed="0.110442"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.301033" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.300922" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.300903" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.302341" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.302233" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.302216" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.302863" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.302545" elapsed="0.000344"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.303253" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.303040" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.349215" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.303775" elapsed="0.045545"/>
</kw>
<msg time="2026-04-25T23:59:44.349483" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.349529" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.303431" elapsed="0.046135"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.387267" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.350127" elapsed="0.037425"/>
</kw>
<msg time="2026-04-25T23:59:44.387752" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.387801" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.349757" elapsed="0.038082"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.388137" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.387917" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.387897" elapsed="0.000460"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.388811" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.388492" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.389162" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.388949" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.388931" elapsed="0.000378"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.389344" elapsed="0.000029"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.391899" elapsed="0.000148"/>
</kw>
<msg time="2026-04-25T23:59:44.392107" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.390777" elapsed="0.001459"/>
</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="NOT RUN" start="2026-04-25T23:59:44.392501" elapsed="0.000093"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.392869" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.390154" elapsed="0.003030"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.389598" elapsed="0.003655"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.301931" elapsed="0.091420"/>
</kw>
<msg time="2026-04-25T23:59:44.393443" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.393486" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.301248" elapsed="0.092275"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.393727" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.393600" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.393581" elapsed="0.000261"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.394231" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.394562" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.394633" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.300555" elapsed="0.094202"/>
</kw>
<msg time="2026-04-25T23:59:44.394851" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.394895" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.296029" elapsed="0.098904"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.395248" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.395006" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.394989" elapsed="0.000336"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:44.295892" elapsed="0.099455"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:44.074505" elapsed="0.320872"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:59:44.072061" elapsed="0.323378"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:59:44.067346" elapsed="0.328153"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.066742" elapsed="0.328806"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:59:44.061977" elapsed="0.333629"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:44.408147" level="INFO">DELETE Request : url=http://10.30.171.37:8181/rests/data/car:cars 
 path_url=/rests/data/car:cars 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.408210" level="INFO">DELETE Response : url=http://10.30.171.37:8181/rests/data/car:cars 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.408367" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:44.395790" elapsed="0.012615"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:44.419706" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.420314" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:59:44.420560" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:44.408632" elapsed="0.011989"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:59:44.421057" elapsed="0.005260"/>
</kw>
<doc>Remove cars from the datastore</doc>
<status status="PASS" start="2026-04-25T23:59:44.061131" elapsed="0.365445"/>
</test>
<test id="s1-s2-t8" name="Delete People" 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-25T23:59:44.432521" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:59:44.432260" 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-25T23:59:44.433812" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.433667" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.433646" 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-25T23:59:44.438759" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.438636" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.438617" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.439835" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:44.439429" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.440330" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:44.440019" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:44.440402" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:59:44.440561" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:44.439055" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.445863" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.445740" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.445720" elapsed="0.000212"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.447084" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.446976" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.446958" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.447585" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.447289" elapsed="0.000323"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.447995" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.447781" elapsed="0.000240"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.487529" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.448505" elapsed="0.039126"/>
</kw>
<msg time="2026-04-25T23:59:44.487816" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.487862" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.448175" elapsed="0.039724"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.529940" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.488542" elapsed="0.041512"/>
</kw>
<msg time="2026-04-25T23:59:44.530218" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.530265" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.488063" elapsed="0.042240"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.530645" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.530422" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.530401" elapsed="0.000359"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.531208" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.530899" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.531560" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.531347" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.531329" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.531688" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.534229" elapsed="0.000148"/>
</kw>
<msg time="2026-04-25T23:59:44.534438" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.533103" elapsed="0.001467"/>
</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="NOT RUN" start="2026-04-25T23:59:44.534897" elapsed="0.000224"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.535378" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.532472" elapsed="0.003092"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.531947" elapsed="0.003681"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.446643" elapsed="0.089103"/>
</kw>
<msg time="2026-04-25T23:59:44.535842" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.535886" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.446080" elapsed="0.089844"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.536111" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.536000" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.535982" elapsed="0.000213"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.536594" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.536945" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.537018" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.445385" elapsed="0.091741"/>
</kw>
<msg time="2026-04-25T23:59:44.537219" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.537263" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.440976" elapsed="0.096324"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.537616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.537373" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.537356" elapsed="0.000353"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:44.440839" elapsed="0.096893"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.543029" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.542918" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.542898" elapsed="0.000199"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.544229" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.544122" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.544103" elapsed="0.000234"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.544798" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.544481" elapsed="0.000344"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.545188" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.544975" elapsed="0.000239"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.586438" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.545713" elapsed="0.040827"/>
</kw>
<msg time="2026-04-25T23:59:44.586740" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.586789" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.545367" elapsed="0.041460"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.625556" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.587332" elapsed="0.038330"/>
</kw>
<msg time="2026-04-25T23:59:44.625871" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.625919" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.586993" elapsed="0.038964"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.626247" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.626034" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.626014" elapsed="0.000311"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.626774" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.626460" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.627121" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.626914" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.626895" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.627230" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.629706" elapsed="0.000158"/>
</kw>
<msg time="2026-04-25T23:59:44.629925" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.628618" elapsed="0.001435"/>
</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="NOT RUN" start="2026-04-25T23:59:44.630315" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.630635" elapsed="0.000094"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.628021" elapsed="0.002817"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.627485" elapsed="0.003417"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.543817" elapsed="0.087181"/>
</kw>
<msg time="2026-04-25T23:59:44.631090" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.631134" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.543242" elapsed="0.087929"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.631517" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.631246" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.631227" elapsed="0.000374"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.632006" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.632374" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.632446" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.542514" elapsed="0.090040"/>
</kw>
<msg time="2026-04-25T23:59:44.632648" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.632708" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.538011" elapsed="0.094734"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.633062" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.632820" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.632803" elapsed="0.000337"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:44.537875" elapsed="0.095288"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.638336" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.638227" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.638207" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.639628" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.639521" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.639503" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.640152" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.639858" elapsed="0.000320"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.640538" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.640327" elapsed="0.000237"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.682527" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.641062" elapsed="0.041693"/>
</kw>
<msg time="2026-04-25T23:59:44.682992" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.683039" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.640733" elapsed="0.042343"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.722113" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.683808" elapsed="0.038424"/>
</kw>
<msg time="2026-04-25T23:59:44.722393" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.722439" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.683312" elapsed="0.039164"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.722865" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.722578" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.722547" elapsed="0.000402"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.723399" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.723091" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.723766" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.723539" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.723520" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.723883" elapsed="0.000043"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.726574" elapsed="0.000174"/>
</kw>
<msg time="2026-04-25T23:59:44.726875" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.725441" elapsed="0.001573"/>
</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="NOT RUN" start="2026-04-25T23:59:44.727281" elapsed="0.000074"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.727602" elapsed="0.000095"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.724781" elapsed="0.003029"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.724203" elapsed="0.003672"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.639219" elapsed="0.088754"/>
</kw>
<msg time="2026-04-25T23:59:44.728075" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.728119" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.638550" elapsed="0.089607"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.728343" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.728234" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.728215" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.729081" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.729420" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.729491" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.637878" elapsed="0.091721"/>
</kw>
<msg time="2026-04-25T23:59:44.729710" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.729756" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.633416" elapsed="0.096378"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.730144" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.729897" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.729879" elapsed="0.000342"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:44.633283" elapsed="0.096962"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:44.440644" elapsed="0.289637"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:59:44.438268" elapsed="0.292077"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:59:44.433377" elapsed="0.297030"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.432953" elapsed="0.297502"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:59:44.429060" elapsed="0.301452"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:44.738425" level="INFO">DELETE Request : url=http://10.30.171.37:8181/rests/data/people:people 
 path_url=/rests/data/people:people 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.738471" level="INFO">DELETE Response : url=http://10.30.171.37:8181/rests/data/people:people 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.738568" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:44.730697" elapsed="0.007897"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:44.742709" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/people:people?content=config 
 path_url=/rests/data/people:people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:44.742890" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/people:people?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:59:44.743081" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${peopleurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:44.738772" elapsed="0.004347"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:59:44.743365" elapsed="0.003387"/>
</kw>
<doc>Remove people from the datastore</doc>
<status status="PASS" start="2026-04-25T23:59:44.427318" elapsed="0.319598"/>
</test>
<test id="s1-s2-t9" name="Delete CarPeople" line="108">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:59:44.751234" elapsed="0.000293"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:59:44.750872" elapsed="0.000731"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.753058" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.752901" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.752871" elapsed="0.000284"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.759708" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.759576" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.759548" elapsed="0.000229"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.760798" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:44.760382" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.761289" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:44.760980" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:44.761360" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:59:44.761520" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:44.760002" elapsed="0.001542"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.767085" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.766969" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.766950" elapsed="0.000205"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.768281" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.768174" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.768157" elapsed="0.000190"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.768805" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.768485" elapsed="0.000346"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.769194" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.768982" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.815521" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.769715" elapsed="0.045910"/>
</kw>
<msg time="2026-04-25T23:59:44.815812" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.815859" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.769371" elapsed="0.046525"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.856359" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.816402" elapsed="0.040245"/>
</kw>
<msg time="2026-04-25T23:59:44.856998" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.857067" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.816065" elapsed="0.041055"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.857728" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.857287" elapsed="0.000655"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.857243" elapsed="0.000743"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.858733" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.858191" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.859191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.858939" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.858913" elapsed="0.000356"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.859309" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.862074" elapsed="0.000154"/>
</kw>
<msg time="2026-04-25T23:59:44.862291" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.860914" elapsed="0.001514"/>
</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="NOT RUN" start="2026-04-25T23:59:44.862719" elapsed="0.000078"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.863054" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.860241" elapsed="0.003008"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.859633" elapsed="0.003681"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.767874" elapsed="0.095540"/>
</kw>
<msg time="2026-04-25T23:59:44.863511" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.863556" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.767302" elapsed="0.096294"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.863823" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.863710" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.863658" elapsed="0.000252"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.864326" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.864689" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.864765" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.766607" elapsed="0.098269"/>
</kw>
<msg time="2026-04-25T23:59:44.864976" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.865020" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.761955" elapsed="0.103104"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.865379" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.865136" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.865119" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:44.761802" elapsed="0.103678"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.873171" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.873062" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.873043" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.874420" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.874307" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.874289" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.874953" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.874626" elapsed="0.000354"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.875381" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.875165" elapsed="0.000242"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.916729" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.875913" elapsed="0.040922"/>
</kw>
<msg time="2026-04-25T23:59:44.916999" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:44.917045" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.875561" elapsed="0.041521"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.955827" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:44.917590" elapsed="0.038348"/>
</kw>
<msg time="2026-04-25T23:59:44.956101" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:44.956147" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.917248" elapsed="0.038936"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.956481" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.956264" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.956242" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:44.957024" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:44.956723" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.957374" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.957163" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.957145" elapsed="0.000307"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:44.957485" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.960153" elapsed="0.000150"/>
</kw>
<msg time="2026-04-25T23:59:44.960364" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:44.958957" elapsed="0.001537"/>
</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="NOT RUN" start="2026-04-25T23:59:44.960786" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.961156" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:44.958323" elapsed="0.003021"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:44.957760" elapsed="0.003647"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.874002" elapsed="0.087504"/>
</kw>
<msg time="2026-04-25T23:59:44.961598" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.961641" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.873385" elapsed="0.088385"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:44.961992" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:44.961859" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.961840" elapsed="0.000235"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.962459" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.962815" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.962888" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.872700" elapsed="0.090333"/>
</kw>
<msg time="2026-04-25T23:59:44.963127" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:44.963171" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.865779" elapsed="0.097429"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:44.963526" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:44.963282" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.963265" elapsed="0.000338"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:44.865615" elapsed="0.098012"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.969040" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.968931" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.968912" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:44.970261" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:44.970153" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:44.970135" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:44.970833" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:44.970467" elapsed="0.000394"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:44.971223" level="INFO">${current_connection_index} = 20</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:44.971011" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.009538" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:44.971748" elapsed="0.037893"/>
</kw>
<msg time="2026-04-25T23:59:45.009843" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:45.009907" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.971400" elapsed="0.038548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.051157" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:45.010462" elapsed="0.040811"/>
</kw>
<msg time="2026-04-25T23:59:45.051441" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:45.051489" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:45.010115" elapsed="0.041411"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.051850" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:45.051606" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.051584" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.052371" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e "r "f ". "D "e "l "e "t "e "[C "C "a "r "P "e "o "p "l "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:45.052066" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.052749" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:45.052510" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.052492" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:45.052862" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:45.055426" elapsed="0.000147"/>
</kw>
<msg time="2026-04-25T23:59:45.055634" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:45.054273" elapsed="0.001514"/>
</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="NOT RUN" start="2026-04-25T23:59:45.056099" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.056425" elapsed="0.000165"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.053632" elapsed="0.003103"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:45.053110" elapsed="0.003692"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:44.969828" elapsed="0.087071"/>
</kw>
<msg time="2026-04-25T23:59:45.056991" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:45.057036" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.969253" elapsed="0.087821"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:45.057260" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:59:45.057151" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.057132" elapsed="0.000211"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.057754" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.058106" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:45.058178" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:44.968572" elapsed="0.089713"/>
</kw>
<msg time="2026-04-25T23:59:45.058377" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:45.058421" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "0 "1 "0 "[C "C "r "u "d "[C "M "d "s "a "l "[C "P "e...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.963906" elapsed="0.094552"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:45.058893" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:45.058531" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.058514" elapsed="0.000459"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:44.963771" elapsed="0.095225"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:44.761603" elapsed="0.297424"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:59:44.759020" elapsed="0.300066"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:59:44.752411" elapsed="0.306732"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:44.751825" elapsed="0.307364"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:59:44.747997" elapsed="0.311248"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.066982" level="INFO">DELETE Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people 
 path_url=/rests/data/car-people:car-people 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:45.067045" level="INFO">DELETE Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:45.067219" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:45.059409" elapsed="0.007847"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.072073" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 path_url=/rests/data/car-people:car-people?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node09gaypny42tkh1k25bj4omu83s3.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:45.072260" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car-people:car-people?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:59:45.072400" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>session</arg>
<arg>url=${carpeopleurl_config}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:45.067485" elapsed="0.004951"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-25T23:59:45.072761" elapsed="0.003564"/>
</kw>
<doc>Remove car-people entries from the datastore</doc>
<status status="PASS" start="2026-04-25T23:59:44.747297" elapsed="0.329192"/>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-25T23:59:45.077551" elapsed="0.000773"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.078666" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T23:59:45.078560" elapsed="0.001376"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-25T23:59:45.077254" elapsed="0.002790"/>
</kw>
<doc>Test for measuring execution time of MD-SAL DataStore operations in cluster.

Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This test suite requires odl-restconf and odl-clustering-test-app modules.
The script cluster_rest_script.py is used for generating requests for
operations on people, car and car-people DataStore test models.
(see the https://wiki.opendaylight.org/view/MD-SAL_Clustering_Test_Plan)

Reported bugs:
https://bugs.opendaylight.org/show_bug.cgi?id=4220</doc>
<status status="FAIL" start="2026-04-25T23:48:18.086174" elapsed="686.993914"/>
</suite>
<suite id="s1-s3" name="Puts During Isolation" source="/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/puts_during_isolation.robot">
<kw name="Start Suite" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.163905" 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-25T23:59:45.160015" elapsed="0.003942"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T23:59:45.159654" elapsed="0.004371"/>
</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-25T23:59:45.168692" 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-25T23:59:45.165107" elapsed="0.003614"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T23:59:45.168931" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:45.168810" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.168785" elapsed="0.000219"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.169514" 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-25T23:59:45.169155" elapsed="0.000402"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.170116" level="INFO">${cluster_size} = 3</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-25T23:59:45.169759" elapsed="0.000383"/>
</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-25T23:59:45.170640" elapsed="0.000318"/>
</kw>
<msg time="2026-04-25T23:59:45.171059" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:45.171106" level="INFO">${possibly_int_of_members} = 3</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-25T23:59:45.170303" elapsed="0.000827"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.171687" level="INFO">${int_of_members} = 3</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-25T23:59:45.171293" elapsed="0.000422"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.172695" 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-25T23:59:45.172414" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.173121" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:45.172862" elapsed="0.000285"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.173586" 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-25T23:59:45.173298" elapsed="0.000315"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.176522" elapsed="0.000231"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.177230" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.176905" elapsed="0.000350"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.177399" elapsed="0.000230"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.178443" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.178149" elapsed="0.000320"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:45.178515" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:59:45.178841" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.177832" elapsed="0.001035"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.179520" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.171.37:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a03f6ac90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:59:45.179074" elapsed="0.000584"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.179829" elapsed="0.000193"/>
</kw>
<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="PASS" start="2026-04-25T23:59:45.175969" elapsed="0.004112"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:45.175785" elapsed="0.004341"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.180945" elapsed="0.000188"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.181606" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.181281" elapsed="0.000352"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.181792" elapsed="0.000254"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.182827" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.182516" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:45.182899" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:59:45.183050" level="INFO">${session_alias} = ClusterManagement__session_2</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.182230" elapsed="0.000845"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.183626" level="INFO">Creating Session using : alias=ClusterManagement__session_2, url=http://10.30.171.80:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a1030d3d0&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:59:45.183222" elapsed="0.000522"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.183897" elapsed="0.000189"/>
</kw>
<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="PASS" start="2026-04-25T23:59:45.180382" elapsed="0.003762"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:45.180213" elapsed="0.003974"/>
</iter>
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.185003" elapsed="0.000187"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.185655" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.185336" elapsed="0.000360"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.185838" elapsed="0.000236"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.186850" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:45.186538" elapsed="0.000339"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:45.186921" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:59:45.187073" level="INFO">${session_alias} = ClusterManagement__session_3</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.186255" elapsed="0.000842"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:45.187646" level="INFO">Creating Session using : alias=ClusterManagement__session_3, url=http://10.30.170.188:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x703a121f5490&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-25T23:59:45.187242" elapsed="0.000526"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.187923" elapsed="0.000195"/>
</kw>
<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="PASS" start="2026-04-25T23:59:45.184441" elapsed="0.003734"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:45.184271" elapsed="0.003949"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-25T23:59:45.173685" elapsed="0.014601"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.188863" level="INFO">${ClusterManagement__member_index_list} = [1, 2, 3]</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-25T23:59:45.188446" elapsed="0.000461"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.189462" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.171.37', 2: '10.30.171.80', 3: '10.30.170.188'}</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-25T23:59:45.189061" elapsed="0.000444"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.190087" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1', 'ClusterManagement__session_2', 'ClusterManagement__session_3']</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-25T23:59:45.189657" elapsed="0.000474"/>
</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-25T23:59:45.171964" elapsed="0.018226"/>
</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-25T23:59:45.164773" elapsed="0.025472"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:45.190425" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:45.190312" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.190292" 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-25T23:59:45.193621" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:45.193239" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.194153" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:45.193816" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:45.194223" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:59:45.194381" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:45.192921" elapsed="0.001484"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:45.195383" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.195118" elapsed="0.000291"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.196152" 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-25T23:59:45.196253" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:45.195983" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:59:45.199679" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:45.199106" elapsed="0.000661"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.199086" elapsed="0.000720"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.200436" 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-25T23:59:45.200682" 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-25T23:59:45.199996" elapsed="0.000742"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.201663" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.37" 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-25T23:59:45.200996" elapsed="0.000788"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.202977" 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-25T23:59:45.202064" elapsed="0.000964"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.204740" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:59:45.204918" 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-25T23:59:45.204369" elapsed="0.000628"/>
</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-25T23:59:45.205331" elapsed="0.000470"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.207090" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:59:45.822021" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:48:18 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-25T23:59:45.206610" elapsed="0.615542"/>
</kw>
<msg time="2026-04-25T23:59:45.822229" 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="PASS" start="2026-04-25T23:59:45.206174" elapsed="0.616209"/>
</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="PASS" start="2026-04-25T23:59:45.203462" elapsed="0.619069"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.823397" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:59:45.836364" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:59:45.836779" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:59:45.837011" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:59:45.822901" elapsed="0.014226"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:45.837818" elapsed="0.001183"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.841563" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:45.840261" elapsed="0.001595"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:45.842885" elapsed="0.000117"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:45.842286" elapsed="0.000855"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.842229" elapsed="0.000967"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:45.843624" elapsed="0.000107"/>
</return>
<status status="PASS" start="2026-04-25T23:59:45.843312" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.843289" elapsed="0.000612"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:45.843983" elapsed="0.000022"/>
</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-25T23:59:45.848251" elapsed="0.000654"/>
</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-25T23:59:45.849277" elapsed="0.000525"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:45.850178" elapsed="0.000308"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.844636" elapsed="0.005946"/>
</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="PASS" start="2026-04-25T23:59:45.198120" elapsed="0.652729"/>
</kw>
<msg time="2026-04-25T23:59:45.850927" 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="PASS" start="2026-04-25T23:59:45.197440" elapsed="0.653569"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:59:45.196937" elapsed="0.654210"/>
</kw>
<msg time="2026-04-25T23:59:45.851214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:45.196430" elapsed="0.654848"/>
</kw>
<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-25T23:59:45.854774" elapsed="0.000434"/>
</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-25T23:59:45.855525" elapsed="0.000184"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:45.855853" elapsed="0.000108"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:45.851688" elapsed="0.004325"/>
</kw>
<msg time="2026-04-25T23:59:45.856106" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:45.195616" elapsed="0.660521"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.856555" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:45.856305" elapsed="0.000293"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:45.856640" elapsed="0.000046"/>
</return>
<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="PASS" start="2026-04-25T23:59:45.194770" elapsed="0.662018"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:45.194582" elapsed="0.662245"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:45.857805" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:45.857467" elapsed="0.000365"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.858560" 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-25T23:59:45.858660" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:45.858420" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:59:45.862211" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:45.861601" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:45.861581" elapsed="0.000754"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.862970" 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-25T23:59:45.863202" 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-25T23:59:45.862523" elapsed="0.000729"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.864179" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.171.80" 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-25T23:59:45.863504" elapsed="0.000777"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.865427" level="INFO">${conn_id} = 4</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-25T23:59:45.864539" elapsed="0.000938"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:59:45.867205" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:59:45.867378" 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-25T23:59:45.866838" elapsed="0.000583"/>
</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-25T23:59:45.867757" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:59:45.869311" level="INFO">Logging into '10.30.171.80:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:59:46.458652" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:46 UTC 2026

  System load:  0.0                Processes:             119
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.80
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:48:19 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-1 ~]&gt;</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="PASS" start="2026-04-25T23:59:45.868991" elapsed="0.589840"/>
</kw>
<msg time="2026-04-25T23:59:46.459008" 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="PASS" start="2026-04-25T23:59:45.868539" elapsed="0.590633"/>
</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="PASS" start="2026-04-25T23:59:45.865911" elapsed="0.593410"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:46.460190" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:59:46.472974" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:59:46.473341" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:59:46.473573" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:59:46.459697" elapsed="0.014023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:46.474411" elapsed="0.001150"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:46.478025" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:46.476768" elapsed="0.001537"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:46.479287" elapsed="0.000111"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:46.478732" elapsed="0.000832"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:46.478623" elapsed="0.001024"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:46.480428" elapsed="0.000134"/>
</return>
<status status="PASS" start="2026-04-25T23:59:46.479934" elapsed="0.000834"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:46.479896" elapsed="0.000963"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:46.480988" elapsed="0.000036"/>
</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-25T23:59:46.486386" elapsed="0.000682"/>
</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-25T23:59:46.487527" elapsed="0.000484"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:46.488362" elapsed="0.000328"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:46.482046" elapsed="0.006746"/>
</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="PASS" start="2026-04-25T23:59:45.860691" elapsed="0.628344"/>
</kw>
<msg time="2026-04-25T23:59:46.489113" 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="PASS" start="2026-04-25T23:59:45.860061" elapsed="0.629125"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:59:45.859340" elapsed="0.629955"/>
</kw>
<msg time="2026-04-25T23:59:46.489353" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:45.858852" elapsed="0.630563"/>
</kw>
<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-25T23:59:46.492453" 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-25T23:59:46.492942" elapsed="0.000145"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:46.493227" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:46.489831" elapsed="0.003546"/>
</kw>
<msg time="2026-04-25T23:59:46.493470" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:45.858056" elapsed="0.635440"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:46.493928" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:46.493663" elapsed="0.000306"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:46.494013" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:59:45.857112" elapsed="0.637039"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:45.856928" elapsed="0.637267"/>
</iter>
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:46.495182" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:46.494902" elapsed="0.000306"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:46.495973" 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-25T23:59:46.496073" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:46.495833" elapsed="0.000266"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-25T23:59:46.499358" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:46.498813" elapsed="0.000630"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:46.498794" elapsed="0.000686"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:46.500113" 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-25T23:59:46.500340" 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-25T23:59:46.499681" elapsed="0.000711"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:46.501319" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.188" 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-25T23:59:46.500646" elapsed="0.000777"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:46.502603" 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-25T23:59:46.501704" elapsed="0.000949"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:59:46.504329" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:59:46.504504" 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-25T23:59:46.503968" elapsed="0.000578"/>
</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-25T23:59:46.504889" elapsed="0.000619"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:59:46.506662" level="INFO">Logging into '10.30.170.188:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:59:47.086600" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:46 UTC 2026

  System load:  0.04               Processes:             119
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 9%                 IPv4 address for ens3: 10.30.170.188
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:48:20 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-2 ~]&gt;</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="PASS" start="2026-04-25T23:59:46.506337" elapsed="0.580456"/>
</kw>
<msg time="2026-04-25T23:59:47.086885" 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="PASS" start="2026-04-25T23:59:46.505877" elapsed="0.581183"/>
</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="PASS" start="2026-04-25T23:59:46.503091" elapsed="0.584126"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.088117" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-04-25T23:59:47.101344" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-04-25T23:59:47.101586" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:59:47.101762" level="INFO">${stderr} = iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission ...</msg>
<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="PASS" start="2026-04-25T23:59:47.087592" elapsed="0.014240"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.102291" elapsed="0.000778"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.105527" level="INFO">iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
iptables-save v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.104236" elapsed="0.001689"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:47.106950" elapsed="0.000113"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:47.106358" elapsed="0.000873"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.106300" elapsed="0.001013"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:47.108106" elapsed="0.000132"/>
</return>
<status status="PASS" start="2026-04-25T23:59:47.107493" elapsed="0.000917"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.107456" elapsed="0.001040"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-25T23:59:47.108625" elapsed="0.000036"/>
</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-25T23:59:47.115307" elapsed="0.000526"/>
</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-25T23:59:47.116099" elapsed="0.000286"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.116633" elapsed="0.000235"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.109704" elapsed="0.007234"/>
</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="PASS" start="2026-04-25T23:59:46.497853" elapsed="0.619264"/>
</kw>
<msg time="2026-04-25T23:59:47.117174" 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="PASS" start="2026-04-25T23:59:46.497230" elapsed="0.619996"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-25T23:59:46.496754" elapsed="0.620554"/>
</kw>
<msg time="2026-04-25T23:59:47.117349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:46.496246" elapsed="0.621149"/>
</kw>
<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-25T23:59:47.119915" 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-25T23:59:47.120389" elapsed="0.000144"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.120686" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.117693" elapsed="0.003141"/>
</kw>
<msg time="2026-04-25T23:59:47.120927" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:46.495417" elapsed="0.625535"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.121365" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.121118" elapsed="0.000287"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:47.121447" elapsed="0.000029"/>
</return>
<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="PASS" start="2026-04-25T23:59:46.494517" elapsed="0.627056"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:46.494334" elapsed="0.627278"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:45.194456" elapsed="1.927194"/>
</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-25T23:59:45.190723" elapsed="1.931007"/>
</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-25T23:59:47.121881" elapsed="0.000214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:47.135093" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:47.134983" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.134963" elapsed="0.000199"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.135444" 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-25T23:59:47.135549" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.135306" elapsed="0.000270"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.136003" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.135742" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.136484" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.136236" elapsed="0.000292"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.137272" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:59:47.137047" elapsed="0.000333">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-25T23:59:47.137487" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:59:47.137533" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:47.136696" elapsed="0.000860"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:47.137872" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:47.137632" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.137613" elapsed="0.000359"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.138752" level="INFO">${ip_address} = 10.30.171.37</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.138464" elapsed="0.000315"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:59:47.138827" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:59:47.138978" level="INFO">${odl_ip} = 10.30.171.37</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.138165" elapsed="0.000837"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.139148" elapsed="0.000398"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.139829" level="INFO">index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:59:47.139929" level="INFO">${karaf_connection_object} = index=10
host=10.30.171.37
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.139720" elapsed="0.000235"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.140095" elapsed="0.002001"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.142531" level="INFO">Logging into '10.30.171.37:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:47.421172" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.142266" elapsed="0.279064"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:47.426428" elapsed="0.000406"/>
</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-25T23:59:47.426995" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.427303" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.422480" elapsed="0.004979"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:47.421757" elapsed="0.005749"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.134698" elapsed="0.292860"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:59:47.122853" elapsed="0.304752"/>
</kw>
<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="PASS" start="2026-04-25T23:59:47.122474" elapsed="0.305183"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:47.122340" elapsed="0.305433"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:47.440279" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:47.440159" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.440135" elapsed="0.000220"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.440639" 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-25T23:59:47.440765" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.440501" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.441210" level="INFO">{1: 10}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.440938" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.441644" level="INFO">2</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.441401" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.442447" level="FAIL">Dictionary does not contain key '2'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:59:47.442204" elapsed="0.000348">Dictionary does not contain key '2'.</status>
</kw>
<msg time="2026-04-25T23:59:47.442659" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:59:47.442733" level="INFO">${old_connection_index} = Dictionary does not contain key '2'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:47.441855" elapsed="0.000901"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:47.443049" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:47.442833" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.442814" elapsed="0.000333"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.443885" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.443602" elapsed="0.000309"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:59:47.443959" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:59:47.444115" level="INFO">${odl_ip} = 10.30.171.80</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.443339" elapsed="0.000801"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.444286" elapsed="0.000416"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.444973" level="INFO">index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:59:47.445073" level="INFO">${karaf_connection_object} = index=12
host=10.30.171.80
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_erro...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.444866" elapsed="0.000233"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.445238" elapsed="0.002024"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.447695" level="INFO">Logging into '10.30.171.80:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:47.717241" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.447418" elapsed="0.269976"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:47.720781" elapsed="0.000367"/>
</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-25T23:59:47.721391" elapsed="0.000172"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.721731" elapsed="0.000106"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.718565" elapsed="0.003328"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:47.717810" elapsed="0.004131"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.439862" elapsed="0.282134"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:59:47.428382" elapsed="0.293664"/>
</kw>
<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="PASS" start="2026-04-25T23:59:47.428014" elapsed="0.294087"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:47.427878" elapsed="0.294265"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:47.734719" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:47.734584" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.734561" elapsed="0.000235"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.735083" 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-25T23:59:47.735193" level="INFO">${current_ssh_connection_object} = 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_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.734945" elapsed="0.000275"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.735634" level="INFO">{1: 10, 2: 12}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.735366" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:47.736086" level="INFO">3</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:47.735841" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.736885" level="FAIL">Dictionary does not contain key '3'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-25T23:59:47.736627" elapsed="0.000372">Dictionary does not contain key '3'.</status>
</kw>
<msg time="2026-04-25T23:59:47.737107" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-25T23:59:47.737153" level="INFO">${old_connection_index} = Dictionary does not contain key '3'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:47.736278" elapsed="0.000898"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:47.737469" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:47.737252" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:47.737233" elapsed="0.000334"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:47.738360" level="INFO">${ip_address} = 10.30.170.188</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.738048" elapsed="0.000344"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:59:47.738444" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:59:47.738606" level="INFO">${odl_ip} = 10.30.170.188</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:47.737782" elapsed="0.000849"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.738797" elapsed="0.000404"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.739472" level="INFO">index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-25T23:59:47.739573" level="INFO">${karaf_connection_object} = index=14
host=10.30.170.188
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.739365" elapsed="0.000234"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.739753" elapsed="0.002049"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:47.742266" level="INFO">Logging into '10.30.170.188:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:48.004984" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:47.741959" elapsed="0.263255"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:48.008717" elapsed="0.000377"/>
</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-25T23:59:48.009254" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.009567" elapsed="0.000131"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.006503" elapsed="0.003254"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:48.005701" elapsed="0.004104"/>
</kw>
<arg>member_index=${index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for ${member_index},
close the previous connection. In any case create a new connection
to karaf console for ${member_index}, set correct prompt set and login to karaf console.
Store connection index for ${member_index} and restore the previous active connection.</doc>
<status status="PASS" start="2026-04-25T23:59:47.734277" elapsed="0.275584"/>
</kw>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:59:47.722823" elapsed="0.287094"/>
</kw>
<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="PASS" start="2026-04-25T23:59:47.722430" elapsed="0.287542"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:47.722250" elapsed="0.287766"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-04-25T23:59:47.122152" elapsed="0.887902"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T23:59:45.164320" elapsed="2.845800"/>
</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-25T23:59:48.012707" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.012572" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.012548" 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-25T23:59:48.017293" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.017181" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.017162" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.018340" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:48.017939" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.018883" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:48.018549" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:48.018955" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:59:48.019131" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:48.017590" elapsed="0.001566"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.024233" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.024124" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.024105" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.025509" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.025382" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.025364" elapsed="0.000213"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.026065" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.025735" elapsed="0.000357"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.026600" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:48.026335" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.072144" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.027315" elapsed="0.044983"/>
</kw>
<msg time="2026-04-25T23:59:48.072440" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:48.072488" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.026815" elapsed="0.045711"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.139806" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:48.073249" elapsed="0.066850"/>
</kw>
<msg time="2026-04-25T23:59:48.140328" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:48.140378" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.072732" elapsed="0.067685"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.141065" elapsed="0.000059"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.140559" elapsed="0.000663"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.140513" elapsed="0.000742"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.141902" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:48.141398" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.142311" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.142076" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.142057" elapsed="0.000466"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:48.142565" elapsed="0.000048"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:48.145197" elapsed="0.000456"/>
</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-25T23:59:48.146006" elapsed="0.000313"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.146655" elapsed="0.000259"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.144250" elapsed="0.002758"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:48.142927" elapsed="0.004216"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:48.025093" elapsed="0.122153"/>
</kw>
<msg time="2026-04-25T23:59:48.147344" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.147388" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.024446" elapsed="0.122980"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:48.147611" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:48.147504" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.147485" elapsed="0.000229"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.148132" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.148548" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.148621" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:48.023831" elapsed="0.125082"/>
</kw>
<msg time="2026-04-25T23:59:48.149012" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.149057" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.019527" elapsed="0.129567"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.149429" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.149171" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.149154" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:48.019391" elapsed="0.130141"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.154758" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.154633" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.154614" elapsed="0.000213"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.156018" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.155891" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.155874" elapsed="0.000211"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.156543" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.156221" elapsed="0.000349"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.157061" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:48.156826" elapsed="0.000261"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.199204" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.157734" elapsed="0.041644"/>
</kw>
<msg time="2026-04-25T23:59:48.199545" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:48.199592" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.157239" elapsed="0.042390"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.264514" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:48.200412" elapsed="0.064328"/>
</kw>
<msg time="2026-04-25T23:59:48.264908" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:48.264954" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.199857" elapsed="0.065135"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.265427" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.265108" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.265074" elapsed="0.000531"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.266184" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:48.265762" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.266588" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.266346" elapsed="0.000527"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.266328" elapsed="0.000572"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:48.267016" elapsed="0.000048"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:48.269197" elapsed="0.000454"/>
</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-25T23:59:48.269996" elapsed="0.000307"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.270643" elapsed="0.000433"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.268412" elapsed="0.002754"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:48.267415" elapsed="0.003881"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:48.155583" elapsed="0.115819"/>
</kw>
<msg time="2026-04-25T23:59:48.271500" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.271545" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.154985" elapsed="0.116598"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:48.271791" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:48.271665" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.271645" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.272290" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.272962" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.273039" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:48.154306" elapsed="0.118847"/>
</kw>
<msg time="2026-04-25T23:59:48.273249" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.273294" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.149827" elapsed="0.123504"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.273650" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.273405" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.273388" elapsed="0.000356"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:48.149687" elapsed="0.124080"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.279009" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.278900" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.278880" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.280246" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.280120" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.280102" elapsed="0.000213"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.280790" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.280451" elapsed="0.000366"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.281201" level="INFO">${current_connection_index} = None</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:48.280972" elapsed="0.000255"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.321997" level="INFO">@root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "r "k "s "p "a "c "e "/ "c "o "n "[78Ct "[A[78Cr</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.281879" elapsed="0.040250"/>
</kw>
<msg time="2026-04-25T23:59:48.322259" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:48.322306" level="INFO">${message_write} = @root&gt;log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "s "u "i "t "e "[C "/ "w "/ "w "o "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.281378" elapsed="0.040965"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.400767" level="INFO">"o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:48.323060" elapsed="0.077914"/>
</kw>
<msg time="2026-04-25T23:59:48.401136" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:48.401182" level="INFO">${message_wait} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.322533" elapsed="0.078687"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.401606" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.401315" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.401289" elapsed="0.000514"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.402361" level="INFO"> "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l "- "o "n "l "y "- "c "h "r "o "m "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "c "o "n "t "[78Cr "[A[78Co
 "l "l "e "r "/ "T "h "r "e "e "N "o "d "e "s "_ "D "a "t "a "s "t "o "r "e "/ "p "u "t "s "_ "d "u "r "i "n "g "_ "i "s "o "l "a "t "i "o "n ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:48.401944" elapsed="0.000532"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.402819" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.402544" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.402525" elapsed="0.000473"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:48.403038" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<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-25T23:59:48.405297" elapsed="0.000472"/>
</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-25T23:59:48.406110" elapsed="0.000342"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.406803" elapsed="0.000240"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.404501" elapsed="0.002634"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:48.403395" elapsed="0.003877"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:48.279833" elapsed="0.127561"/>
</kw>
<msg time="2026-04-25T23:59:48.407494" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.407538" level="INFO">${message} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.279227" elapsed="0.128350"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:48.407958" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-25T23:59:48.407661" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.407638" elapsed="0.000408"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.408457" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.408814" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.408888" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:48.278474" elapsed="0.130526"/>
</kw>
<msg time="2026-04-25T23:59:48.409099" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:48.409144" level="INFO">${output} =  "o "l "l "e "r "- "c "s "i "t "- "3 "n "o "d "e "- "r "e "s "t "- "c "l "u "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:48.274042" elapsed="0.135140"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:48.409508" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:48.409260" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.409242" elapsed="0.000389"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:48.273906" elapsed="0.135754"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:48.019212" elapsed="0.390501"/>
</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-25T23:59:48.016871" elapsed="0.392913"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T23:59:48.010781" elapsed="0.399068"/>
</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-25T23:59:48.010282" elapsed="0.399614"/>
</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-25T23:59:45.159213" elapsed="3.250742"/>
</kw>
<kw name="Setup_Logging_For_Debug_Purposes_On_List_Or_All" owner="SetupUtils">
<for flavor="IN">
<iter>
<kw name="Run_Karaf_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.414075" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:48.413679" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.414609" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:48.414258" elapsed="0.000377"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:48.414697" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:59:48.414859" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:48.413344" elapsed="0.001540"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.415470" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.415197" elapsed="0.000300"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.416360" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.416250" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.416232" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.417754" 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-25T23:59:48.417859" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.417585" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.422127" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.421995" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.421976" elapsed="0.000219"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.422336" elapsed="0.000914"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.423984" level="INFO">Logging into '10.30.171.37:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:48.606197" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.423411" elapsed="0.182999"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.658197" level="INFO">@root&gt;log:set info org.opendaylight.controller</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.606729" elapsed="0.051542"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.660192" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-04-25T23:59:48.660295" level="INFO">${output} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:48.658451" elapsed="0.001873"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.660561" elapsed="0.000220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.660944" elapsed="0.000193"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.661879" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:48.661302" elapsed="0.000628"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:48.661982" elapsed="0.000056"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.171.37
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-04-25T23:59:48.421647" elapsed="0.240513"/>
</kw>
<msg time="2026-04-25T23:59:48.662216" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.418035" elapsed="0.244243"/>
</kw>
<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-25T23:59:48.665153" elapsed="0.000346"/>
</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-25T23:59:48.665659" elapsed="0.000193"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.665993" elapsed="0.000097"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.662658" elapsed="0.003482"/>
</kw>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:48.417028" elapsed="0.249178"/>
</kw>
<msg time="2026-04-25T23:59:48.666262" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.416571" elapsed="0.249742"/>
</kw>
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="PASS" start="2026-04-25T23:59:48.415861" elapsed="0.250544"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:48.415069" elapsed="0.251376"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.667041" level="INFO">${member_ip} = 10.30.171.80</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.666755" elapsed="0.000312"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.668066" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.667946" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.667922" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.669317" 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-25T23:59:48.669420" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.669175" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.673955" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.673813" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.673793" elapsed="0.000232"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.674165" elapsed="0.000934"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.675838" level="INFO">Logging into '10.30.171.80:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:48.924573" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.675259" elapsed="0.249635"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.978396" level="INFO">@root&gt;log:set info org.opendaylight.controller</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.925247" elapsed="0.053708"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.982948" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-04-25T23:59:48.983113" level="INFO">${output} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:48.979426" elapsed="0.003716"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:48.983295" elapsed="0.000279"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.983761" elapsed="0.000187"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:48.984650" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:48.984099" elapsed="0.000682"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:48.984835" elapsed="0.000050"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.171.37
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-04-25T23:59:48.673446" elapsed="0.311556"/>
</kw>
<msg time="2026-04-25T23:59:48.985056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.669592" elapsed="0.315529"/>
</kw>
<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-25T23:59:48.987886" elapsed="0.000345"/>
</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-25T23:59:48.988391" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.988731" elapsed="0.000098"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:48.985447" elapsed="0.003435"/>
</kw>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:48.668740" elapsed="0.320206"/>
</kw>
<msg time="2026-04-25T23:59:48.989002" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.668280" elapsed="0.320772"/>
</kw>
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="PASS" start="2026-04-25T23:59:48.667338" elapsed="0.321802"/>
</kw>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:48.666590" elapsed="0.322589"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:48.989722" level="INFO">${member_ip} = 10.30.170.188</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.989422" elapsed="0.000328"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.990557" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.990411" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.990389" elapsed="0.000241"/>
</if>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.992338" 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-25T23:59:48.992446" level="INFO">${current_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_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-25T23:59:48.991908" elapsed="0.000565"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:48.996746" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:48.996586" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:48.996565" elapsed="0.000252"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.996956" elapsed="0.000869"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-25T23:59:48.998560" level="INFO">Logging into '10.30.170.188:8101' as 'karaf'.</msg>
<msg time="2026-04-25T23:59:49.211059" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-25T23:59:48.997984" elapsed="0.213338"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.262358" level="INFO">@root&gt;log:set info org.opendaylight.controller</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:49.211564" elapsed="0.051035"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.266791" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-04-25T23:59:49.267016" level="INFO">${output} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:49.263128" elapsed="0.003952"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:49.267330" elapsed="0.000292"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:49.267852" elapsed="0.000234"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.269090" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:49.268292" elapsed="0.000887"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-25T23:59:49.269262" elapsed="0.000078"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.171.37
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-04-25T23:59:48.996253" elapsed="0.273249"/>
</kw>
<msg time="2026-04-25T23:59:49.269578" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.992622" elapsed="0.277037"/>
</kw>
<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-25T23:59:49.273872" elapsed="0.000479"/>
</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-25T23:59:49.274604" elapsed="0.000478"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-25T23:59:49.275294" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:49.270212" elapsed="0.005235"/>
</kw>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-25T23:59:48.991458" elapsed="0.284056"/>
</kw>
<msg time="2026-04-25T23:59:49.275573" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:48.991014" elapsed="0.284609"/>
</kw>
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="PASS" start="2026-04-25T23:59:48.990010" elapsed="0.285720"/>
</kw>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:48.989290" elapsed="0.286481"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:48.414936" elapsed="0.860875"/>
</for>
<arg>log:set ${log_level} ${logger}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run karaf command on each.</doc>
<status status="PASS" start="2026-04-25T23:59:48.412858" elapsed="0.863018"/>
</kw>
<var name="${logger}">org.opendaylight.controller</var>
<status status="PASS" start="2026-04-25T23:59:48.412630" elapsed="0.863282"/>
</iter>
<var>${logger}</var>
<value>@{loggers_list}</value>
<status status="PASS" start="2026-04-25T23:59:48.412482" elapsed="0.863462"/>
</for>
<arg>${TEST_LOG_LEVEL}</arg>
<arg>${TEST_LOG_COMPONENTS}</arg>
<doc>Set the log level for given loggers on node nodes of the cluster</doc>
<status status="PASS" start="2026-04-25T23:59:48.410179" elapsed="0.865820"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.280511" level="INFO">${tools_connection} = 25</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-25T23:59:49.280134" elapsed="0.000403"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.282209" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:59:49.282285" 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-25T23:59:49.281921" elapsed="0.000388"/>
</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-25T23:59:49.282457" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.283650" level="INFO">Logging into '10.30.171.32:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:59:49.874064" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:49 UTC 2026

  System load:  0.0                Processes:             104
  Usage of /:   19.6% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.32
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

9 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:48:25 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</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="PASS" start="2026-04-25T23:59:49.283335" elapsed="0.590990"/>
</kw>
<msg time="2026-04-25T23:59:49.874415" 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="PASS" start="2026-04-25T23:59:49.282986" elapsed="0.591514"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:59:49.281467" elapsed="0.593152"/>
</kw>
<msg time="2026-04-25T23:59:49.874712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:49.281081" elapsed="0.593685"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-25T23:59:49.280746" elapsed="0.594103"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-04-25T23:59:49.874904" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T23:59:49.875133" level="INFO">${mininet_conn_id} = 25</msg>
<var>${mininet_conn_id}</var>
<arg>prompt=~]&gt;</arg>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:59:49.279784" elapsed="0.595375"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.875890" level="INFO">${mininet_conn_id} = 25</msg>
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:49.875408" elapsed="0.000525"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.883564" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-25T23:59:49.893786" level="INFO">'/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py' -&gt; '/home/jenkins//cluster_rest_script.py'</msg>
<arg>/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/${TOOL_NAME}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:59:49.876087" elapsed="0.017800"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.894469" level="INFO">Executing command 'ls'.</msg>
<msg time="2026-04-25T23:59:49.907293" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:59:49.907565" level="INFO">${stdout} = cluster_rest_script.log
cluster_rest_script.py
lf-env.sh</msg>
<msg time="2026-04-25T23:59:49.907705" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:59:49.907806" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:59:49.894182" elapsed="0.013676"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.913357" level="INFO">${name} = controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:49.912783" elapsed="0.000612"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.916479" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:49.913622" elapsed="0.002895"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T23:59:49.917011" level="INFO">${date} = 2026-04-25 23:59:49.917</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T23:59:49.916760" elapsed="0.000288"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-04-25T23:59:49.917707" level="INFO">${timestamp} = 1777161589.917</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-04-25T23:59:49.917257" elapsed="0.000489"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-04-25T23:59:49.917815" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T23:59:49.918168" level="INFO">${out_file} = cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log</msg>
<var>${out_file}</var>
<arg>${TOOL_NAME}</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-04-25T23:59:49.908476" elapsed="0.009729"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.918926" level="INFO">${out_file} = cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log</msg>
<arg>${out_file}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:49.918426" elapsed="0.000562"/>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:49.925406" level="INFO">${cd_and_command} = cd '.' &amp;&amp; virtualenv /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:49.925075" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:49.926884" level="INFO">Executing command 'cd '.' &amp;&amp; virtualenv /tmp/defaultvenv'.</msg>
<msg time="2026-04-25T23:59:50.463559" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:59:50.463977" level="INFO">${stdout} = created virtual environment CPython3.10.12.final.0-64 in 327ms
  creator CPython3Posix(dest=/tmp/defaultvenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=b...</msg>
<msg time="2026-04-25T23:59:50.464084" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:59:50.464175" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:59:49.926679" elapsed="0.537547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.466416" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:59:50.465783" elapsed="0.000738"/>
</kw>
<msg time="2026-04-25T23:59:50.466773" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:59:50.466904" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:50.464893" elapsed="0.002065"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.468339" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:50.467326" elapsed="0.001074"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.470873" level="INFO">created virtual environment CPython3.10.12.final.0-64 in 327ms
  creator CPython3Posix(dest=/tmp/defaultvenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/jenkins/.local/share/virtualenv)
    added seed packages: pip==22.0.2, setuptools==59.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:50.470234" elapsed="0.000759"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.471586" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:50.471248" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.472202" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:50.471868" elapsed="0.000396"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:59:50.469407" elapsed="0.002934"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:50.468592" elapsed="0.003802"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:50.468543" elapsed="0.003889"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:59:50.472658" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:50.472513" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:50.472488" elapsed="0.000288"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:50.472975" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-25T23:59:50.472850" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:50.472828" elapsed="0.000272"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:50.473293" elapsed="0.000030"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:59:49.926130" elapsed="0.547327"/>
</kw>
<msg time="2026-04-25T23:59:50.473537" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:49.925585" elapsed="0.548022"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the virtualenv /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-25T23:59:49.924456" elapsed="0.549328"/>
</kw>
<msg time="2026-04-25T23:59:50.473862" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:49.920137" elapsed="0.553787"/>
</kw>
<arg>virtualenv ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-25T23:59:49.919638" elapsed="0.554432"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Virtual_Env_Run_Cmd_At_Cwd" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:50.483350" level="INFO">${cd_and_command} = cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:50.482977" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:50.485173" level="INFO">Executing command 'cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate'.</msg>
<msg time="2026-04-25T23:59:52.683936" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:59:52.684366" level="INFO">${stdout} = Requirement already satisfied: pip in /tmp/defaultvenv/lib/python3.10/site-packages (22.0.2)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━...</msg>
<msg time="2026-04-25T23:59:52.684546" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:59:52.684755" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:59:50.484828" elapsed="2.200159"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.689909" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:59:52.688816" elapsed="0.001351"/>
</kw>
<msg time="2026-04-25T23:59:52.690522" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:59:52.690730" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:52.685787" elapsed="0.005035"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.693018" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:52.691483" elapsed="0.001578"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.695610" level="INFO">Requirement already satisfied: pip in /tmp/defaultvenv/lib/python3.10/site-packages (22.0.2)
Collecting pip
  Downloading pip-26.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 28.2 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.0.2
    Uninstalling pip-22.0.2:
      Successfully uninstalled pip-22.0.2
Successfully installed pip-26.0.1</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:52.695190" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.696481" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:52.696103" elapsed="0.000471"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.697318" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:52.696950" elapsed="0.000467"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:59:52.694243" elapsed="0.003283"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:52.693250" elapsed="0.004396"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:52.693220" elapsed="0.004556"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:59:52.698034" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:52.697851" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:52.697831" elapsed="0.000346"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:52.698395" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-04-25T23:59:52.698231" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:52.698215" elapsed="0.000348"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:52.698723" elapsed="0.000023"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:59:50.484176" elapsed="2.214737"/>
</kw>
<msg time="2026-04-25T23:59:52.698976" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:50.483529" elapsed="2.215504"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the source /tmp/defaultvenv/bin/activate; pip install --upgrade pip; deactivate.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-25T23:59:50.482079" elapsed="2.217039"/>
</kw>
<msg time="2026-04-25T23:59:52.699174" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:50.477021" elapsed="2.222207"/>
</kw>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-25T23:59:50.476246" elapsed="2.223081"/>
</kw>
<msg time="2026-04-25T23:59:52.699382" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Cwd_Should_Pass</arg>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:50.475716" elapsed="2.223716"/>
</kw>
<arg>pip install --upgrade pip</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs given command within activated virtual env and returns stdout.</doc>
<status status="PASS" start="2026-04-25T23:59:50.474948" elapsed="2.224580"/>
</kw>
<msg time="2026-04-25T23:59:52.699577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${upgrade_pip}</arg>
<arg>Virtual_Env_Run_Cmd_At_Cwd</arg>
<arg>pip install --upgrade pip</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:50.474283" elapsed="2.225343"/>
</kw>
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="PASS" start="2026-04-25T23:59:49.919268" elapsed="2.780497"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Virtual_Env_Run_Cmd_At_Cwd" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:52.708419" level="INFO">${cd_and_command} = cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install requests; deactivate</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:52.708073" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:59:52.710291" level="INFO">Executing command 'cd '.' &amp;&amp; source /tmp/defaultvenv/bin/activate; pip install requests; deactivate'.</msg>
<msg time="2026-04-25T23:59:54.152890" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:59:54.153476" level="INFO">${stdout} = Collecting requests
  Downloading requests-2.33.1-py3-none-any.whl.metadata (4.8 kB)
Collecting charset_normalizer&lt;4,&gt;=2 (from requests)
  Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux201...</msg>
<msg time="2026-04-25T23:59:54.153593" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:59:54.153750" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:59:52.709923" elapsed="1.443887"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.158394" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-25T23:59:54.157096" elapsed="0.001543"/>
</kw>
<msg time="2026-04-25T23:59:54.159046" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-25T23:59:54.159184" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:54.154459" elapsed="0.004799"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.161230" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.159892" elapsed="0.001376"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.164384" level="INFO">Collecting requests
  Downloading requests-2.33.1-py3-none-any.whl.metadata (4.8 kB)
Collecting charset_normalizer&lt;4,&gt;=2 (from requests)
  Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB)
Collecting idna&lt;4,&gt;=2.5 (from requests)
  Downloading idna-3.13-py3-none-any.whl.metadata (8.0 kB)
Collecting urllib3&lt;3,&gt;=1.26 (from requests)
  Downloading urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB)
Collecting certifi&gt;=2023.5.7 (from requests)
  Downloading certifi-2026.4.22-py3-none-any.whl.metadata (2.5 kB)
Downloading requests-2.33.1-py3-none-any.whl (64 kB)
Downloading charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (216 kB)
Downloading idna-3.13-py3-none-any.whl (68 kB)
Downloading urllib3-2.6.3-py3-none-any.whl (131 kB)
Downloading certifi-2026.4.22-py3-none-any.whl (135 kB)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests

Successfully installed certifi-2026.4.22 charset_normalizer-3.4.7 idna-3.13 requests-2.33.1 urllib3-2.6.3</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.163907" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.165364" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.164924" elapsed="0.000529"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.166306" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.165869" elapsed="0.000531"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-25T23:59:54.162636" elapsed="0.003863"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.161466" elapsed="0.005160"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.161429" elapsed="0.005357"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.167075" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.166875" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.166850" elapsed="0.000403"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-25T23:59:54.167516" elapsed="0.000074"/>
</return>
<status status="PASS" start="2026-04-25T23:59:54.167333" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.167310" elapsed="0.000463"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.167972" elapsed="0.000031"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-25T23:59:52.709239" elapsed="1.458931"/>
</kw>
<msg time="2026-04-25T23:59:54.168256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:52.708603" elapsed="1.459728"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the source /tmp/defaultvenv/bin/activate; pip install requests; deactivate.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-25T23:59:52.707445" elapsed="1.461037"/>
</kw>
<msg time="2026-04-25T23:59:54.168640" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:52.703763" elapsed="1.464986"/>
</kw>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-25T23:59:52.701392" elapsed="1.467509"/>
</kw>
<msg time="2026-04-25T23:59:54.168982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Cwd_Should_Pass</arg>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate; ${cmd}; deactivate</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:52.701012" elapsed="1.468032"/>
</kw>
<arg>pip install ${package}</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs given command within activated virtual env and returns stdout.</doc>
<status status="PASS" start="2026-04-25T23:59:52.700621" elapsed="1.468559"/>
</kw>
<msg time="2026-04-25T23:59:54.169247" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Virtual_Env_Run_Cmd_At_Cwd</arg>
<arg>pip install ${package}</arg>
<arg>stderr_must_be_empty=False</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:52.700246" elapsed="1.469061"/>
</kw>
<arg>requests</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="PASS" start="2026-04-25T23:59:52.699969" elapsed="1.469468"/>
</kw>
<kw name="Set_Variables_For_Shard" owner="CarPeople">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.177056" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.176645" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.177563" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:54.177248" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:54.177635" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:54.177812" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:54.176319" 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-25T23:59:54.177990" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.178661" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.178313" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.179122" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:54.178874" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.179536" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:54.179292" elapsed="0.000285"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.181917" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.181595" elapsed="0.000349"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:54.181990" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:54.182141" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:54.181299" elapsed="0.000867"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.229150" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.228718" elapsed="0.000462"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.229971" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.229717" elapsed="0.000331">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.230142" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.229365" elapsed="0.000802"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.230918" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.230394" elapsed="0.000552"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.231267" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:59:54.231432" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:59:54.231122" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.231929" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.231656" elapsed="0.000320"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.232904" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.232631" elapsed="0.000319"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.233370" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.233102" elapsed="0.000294"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.233735" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.233936" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.234102" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:59:54.233577" elapsed="0.000583"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.233444" elapsed="0.000745"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:59:54.234233" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:59:54.234393" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:59:54.232363" elapsed="0.002055"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.232065" elapsed="0.002386"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.234615" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.234476" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.232045" elapsed="0.002663"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.235315" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.234867" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.235411" elapsed="0.000029"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:59:54.227886" elapsed="0.007752"/>
</kw>
<msg time="2026-04-25T23:59:54.235723" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.215372" elapsed="0.020419"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.276042" elapsed="0.000065"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.318212" elapsed="0.000070"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.361418" elapsed="0.000040"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.361978" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.362269" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.363463" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.363051" elapsed="0.000555"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:59:54.363005" elapsed="0.000688"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.363967" elapsed="0.000066"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.364293" elapsed="0.000064"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.364608" elapsed="0.000080"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:59:54.362958" elapsed="0.001809"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.362540" elapsed="0.002291"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.364980" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.365191" elapsed="0.000021"/>
</return>
<msg time="2026-04-25T23:59:54.365358" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:59:54.211049" elapsed="0.154338"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.367900" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.367273" elapsed="0.000752">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.368154" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.366169" elapsed="0.002024"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.368980" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.368351" elapsed="0.000793"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.370877" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.369891" elapsed="0.001068"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.369171" elapsed="0.001906"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.368330" elapsed="0.002772"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.373721" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.371249" elapsed="0.002514"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:59:54.373908" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:59:54.374073" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:54.365822" elapsed="0.008276"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.376729" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.376217" elapsed="0.000621">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.376964" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.375008" elapsed="0.002032"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:59:54.377466" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:54.377200" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.377179" elapsed="0.000440"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.377777" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.378024" elapsed="0.000023"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.378179" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:59:54.380375" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:54.374448" elapsed="0.005954"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.382415" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.381964" elapsed="0.000581"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.383261" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.382823" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:54.399554" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:54.400909" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01w3hl86qvrzrg1ljsijpmndwxv2241.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:59:54 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:59:54.401533" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:54.385696" elapsed="0.016051"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.383516" elapsed="0.018512"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.402541" elapsed="0.000103"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.402094" elapsed="0.000858"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.383497" elapsed="0.019511"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.410361" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.407169" elapsed="0.003440"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.405965" elapsed="0.004690"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.405851" elapsed="0.004881"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.413606" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.411410" elapsed="0.002298"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.410878" elapsed="0.002875"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.410829" elapsed="0.002983"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.415007" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.414291" elapsed="0.000814"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.415831" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.415252" elapsed="0.000695"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.416762" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.416307" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.416005" elapsed="0.000857"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.415202" elapsed="0.001714"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.418080" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.417383" elapsed="0.000795"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.418994" elapsed="0.000071"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.418331" elapsed="0.000783"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.419961" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.419471" elapsed="0.000540"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.419173" elapsed="0.000884"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.418281" elapsed="0.001831"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.420964" elapsed="0.000616"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:54.423073" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.422420" elapsed="0.000749"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.424014" elapsed="0.002399"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:54.404109" elapsed="0.022407"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.427009" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.426826" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.426804" elapsed="0.000344"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:54.433378" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:54.427294" elapsed="0.006129"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:54.433569" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T23:59:54.433759" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:54.380839" elapsed="0.052948"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.433853" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:54.434008" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:59:54.190073" elapsed="0.243961"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.434372" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.434118" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.434101" elapsed="0.000420"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.434556" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:59:54.186153" elapsed="0.248642"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.182234" elapsed="0.252608"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.182216" elapsed="0.252651"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:59:54.435437" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:59:54.435330" elapsed="0.000167"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.435559" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.435521" elapsed="0.000092"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.435313" elapsed="0.000324"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.435795" elapsed="0.000022"/>
</kw>
<msg time="2026-04-25T23:59:54.435917" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:59:54.435102" elapsed="0.000841"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.436488" level="INFO">${cluster_index} = 1</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.436102" elapsed="0.000413"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.437144" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.436661" elapsed="0.000510"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.442314" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.442057" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.442781" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.442506" elapsed="0.000319"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:54.452989" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:54.453066" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:59:54 GMT', 'Expires': 'Sat, 25 Apr 2026 22:59:54 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":4,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Leader","LastApplied":7,"LastCommittedTransactionTime":"2026-04-25 23:59:44.407","PeerAddresses":"member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.614","FollowerInitialSyncStatus":false,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.456","active":true,"matchIndex":7,"voting":true,"id":"member-2-shard-car-config","nextIndex":8},{"timeSinceLastActivity":"00:00:00.456","active":true,"matchIndex":7,"voting":true,"id":"member-3-shard-car-config","nextIndex":8}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"757.0 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":2,"TxCohortCacheSize":0,"PeerVotingStates":"member-2-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-1-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161594,"status":200} 
 </msg>
<msg time="2026-04-25T23:59:54.453194" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:54.444818" elapsed="0.008403"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.442891" elapsed="0.010381"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.453477" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.453303" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.442873" elapsed="0.010693"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.458017" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":4,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Leader","LastApplied":7,"LastCommittedTransactionTime":"2026-04-25 23:59:44.407","PeerAddresses":"member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.614","FollowerInitialSyncStatus":false,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.456","active":true,"matchIndex":7,"voting":true,"id":"member-2-shard-car-config","nextIndex":8},{"timeSinceLastActivity":"00:00:00.456","active":true,"matchIndex":7,"voting":true,"id":"member-3-shard-car-config","nextIndex":8}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"757.0 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":2,"TxCohortCacheSize":0,"PeerVotingStates":"member-2-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-1-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161594,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.454835" elapsed="0.003387"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.454571" elapsed="0.003791"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.454551" elapsed="0.003852"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.462052" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.458848" elapsed="0.003387"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.458484" elapsed="0.003890"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.458460" elapsed="0.003954"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.463421" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.462641" elapsed="0.000820"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.464191" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.463564" elapsed="0.000824"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.465153" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.464576" elapsed="0.000618"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.464418" elapsed="0.000889"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.463538" elapsed="0.001794"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.466010" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.465487" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.466332" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.466108" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.467202" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.466695" elapsed="0.000548"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.466523" elapsed="0.000832"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.466089" elapsed="0.001291"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.467537" elapsed="0.000705"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:54.469002" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.468405" elapsed="0.000624"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.469178" elapsed="0.002580"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:54.454055" elapsed="0.017774"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.472016" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.471903" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.471883" elapsed="0.000204"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:54.475141" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:54.472226" elapsed="0.002944"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:54.475223" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:59:54.475392" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:54.437999" elapsed="0.037472"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.475534" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:54.475731" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:59:54.437385" elapsed="0.038373"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.476780" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161594, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.476290" elapsed="0.000518"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:59:54.476857" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:59:54.477115" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-1-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161594, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:59:54.475992" elapsed="0.001160"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:54.477612" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7, 'CommittedTransactionsCount': 2, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [{'active': True, 'id...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.477346" elapsed="0.000302"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:54.478122" level="INFO">${raft_property} = Leader</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.477869" elapsed="0.000287"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:59:54.478215" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:59:54.478409" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.180736" elapsed="0.297705"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:59:54.478517" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T23:59:54.478729" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.180040" elapsed="0.298721"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.479136" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.478863" elapsed="0.000343"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.479498" elapsed="0.000272"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.479238" elapsed="0.000579"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.480030" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.479848" elapsed="0.000248"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.478840" elapsed="0.001287"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:54.179870" elapsed="0.300290"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.483100" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.482717" elapsed="0.000417"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:54.483191" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T23:59:54.483380" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:54.482329" elapsed="0.001082"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.530078" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.529665" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.530900" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.530617" elapsed="0.000415">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.531129" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.530289" elapsed="0.000865"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.531767" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.531334" elapsed="0.000460"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.532121" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:59:54.532297" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:59:54.531970" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.532781" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.532512" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.533749" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.533478" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.534214" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.533945" elapsed="0.000295"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.534557" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.534795" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.534963" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:59:54.534430" elapsed="0.000590"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.534290" elapsed="0.000760"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:59:54.535094" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:54.535256" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:59:54.533215" elapsed="0.002067"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.532916" elapsed="0.002398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.535478" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.535339" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.532895" elapsed="0.002660"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.536214" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.535766" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.536311" elapsed="0.000029"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:59:54.528870" elapsed="0.007654"/>
</kw>
<msg time="2026-04-25T23:59:54.536593" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.516657" elapsed="0.020004"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.576841" elapsed="0.000035"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.617263" elapsed="0.000036"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.657116" elapsed="0.000035"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.657480" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.657746" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.658507" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.658166" elapsed="0.000464"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:59:54.658124" elapsed="0.000861"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.659251" elapsed="0.000065"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.659567" elapsed="0.000063"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.659921" elapsed="0.000063"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:59:54.658084" elapsed="0.001978"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.657933" elapsed="0.002192"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.660274" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.660478" elapsed="0.000019"/>
</return>
<msg time="2026-04-25T23:59:54.660688" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:59:54.512392" elapsed="0.148327"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.663265" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.662522" elapsed="0.000860">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.663509" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.661464" elapsed="0.002084"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.664190" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.663757" elapsed="0.000631"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.665931" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.665101" elapsed="0.000909"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.664418" elapsed="0.001707"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.663736" elapsed="0.002414"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.668920" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.666295" elapsed="0.002665"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:59:54.669105" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T23:59:54.669286" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:54.661125" elapsed="0.008186"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.671637" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.671073" elapsed="0.000837">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.672270" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.669988" elapsed="0.002322"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:59:54.672785" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-04-25T23:59:54.672480" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.672454" elapsed="0.000493"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.673104" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.673355" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.673511" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:59:54.675917" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:54.669658" elapsed="0.006287"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.678027" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.677540" elapsed="0.000617"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.678931" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.678370" elapsed="0.000687"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:54.721191" level="INFO">GET Request : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:54.721817" level="INFO">GET Response : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node010nm13vbqaj8e4vuu4c8k58cv1447.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:59:54 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:59:54.722147" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:54.681372" elapsed="0.040859"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.679190" elapsed="0.043179"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.722643" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.722402" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.679171" elapsed="0.043693"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.727411" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.724835" elapsed="0.002821"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.724265" elapsed="0.003489"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.724209" elapsed="0.003605"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.730585" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.728494" elapsed="0.002241"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.727959" elapsed="0.002825"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.727908" elapsed="0.002934"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.732062" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.731327" elapsed="0.000839"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.732881" elapsed="0.000067"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.732317" elapsed="0.000677"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.733774" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.733357" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.733051" elapsed="0.000821"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.732266" elapsed="0.001660"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.735141" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.734398" elapsed="0.000838"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.735946" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.735384" elapsed="0.000680"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.736829" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.736420" elapsed="0.000458"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.736121" elapsed="0.000802"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.735333" elapsed="0.001644"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.737831" elapsed="0.000617"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:54.739899" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.739332" elapsed="0.000664"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.740823" elapsed="0.002496"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:54.723371" elapsed="0.020049"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.743807" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.743584" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.743564" elapsed="0.000381"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:54.749980" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:54.744084" elapsed="0.005940"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:54.750169" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T23:59:54.750342" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:54.676396" elapsed="0.073972"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.750432" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:54.750584" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:59:54.492241" elapsed="0.258370"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.751080" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.750836" elapsed="0.000358"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.750817" elapsed="0.000402"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.751252" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:59:54.488314" elapsed="0.263064"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.483496" elapsed="0.267926"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.483473" elapsed="0.267973"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:59:54.752034" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:59:54.751930" elapsed="0.000163"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.752153" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.752117" elapsed="0.000074"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.751913" elapsed="0.000300"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.752358" elapsed="0.000022"/>
</kw>
<msg time="2026-04-25T23:59:54.752478" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:59:54.751704" elapsed="0.000799"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.753052" level="INFO">${cluster_index} = 2</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.752659" elapsed="0.000421"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.753718" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.753227" elapsed="0.000520"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.758931" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.758646" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.759362" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.759121" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:54.774983" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:54.775044" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:59:54 GMT', 'Expires': 'Sat, 25 Apr 2026 22:59:54 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Follower","LastApplied":7,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.625","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"435.6 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161594,"status":200} 
 </msg>
<msg time="2026-04-25T23:59:54.775152" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:54.761473" elapsed="0.013704"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.759469" elapsed="0.015752"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.775396" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.775248" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.759452" elapsed="0.016028"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.779122" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Follower","LastApplied":7,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.625","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"435.6 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161594,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.776560" elapsed="0.002752"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.776350" elapsed="0.003064"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.776332" elapsed="0.003112"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.784405" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.779762" elapsed="0.004972"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.779504" elapsed="0.005458"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.779485" elapsed="0.005543"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.786571" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.785380" elapsed="0.001254"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.787347" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.786837" elapsed="0.000824"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.788940" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.788265" elapsed="0.000717"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.787904" elapsed="0.001188"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.786794" elapsed="0.002324"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.789793" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.789272" elapsed="0.000549"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.790113" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.789891" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.790968" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.790439" elapsed="0.000570"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.790286" elapsed="0.000833"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.789873" elapsed="0.001272"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.791294" elapsed="0.000731"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:54.792758" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.792185" elapsed="0.000600"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.792931" elapsed="0.002471"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:54.775973" elapsed="0.019495"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.795645" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:54.795538" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.795519" elapsed="0.000254"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:54.798501" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:54.795912" elapsed="0.002618"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:54.798581" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:59:54.798757" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:54.754552" elapsed="0.044231"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.798840" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:59:54.798987" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161594,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:59:54.753953" elapsed="0.045059"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.800095" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161594, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.799511" elapsed="0.000613"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:59:54.800208" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T23:59:54.800387" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161594, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:59:54.799230" elapsed="0.001184"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:54.800828" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7, 'CommittedTransactionsCount': 0, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerInitialS...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.800562" elapsed="0.000294"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:54.801204" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.801003" elapsed="0.000227"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:59:54.801276" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:59:54.801428" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.481460" elapsed="0.319994"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:59:54.801512" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:59:54.801661" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.480595" elapsed="0.321106"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.801994" elapsed="0.000194"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.801784" elapsed="0.000443"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.802386" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.802251" 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-25T23:59:54.802595" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.802463" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.801767" elapsed="0.000914"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:54.480385" elapsed="0.322323"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.804948" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.804632" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:54.805019" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:54.805164" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:54.804346" elapsed="0.000843"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.852774" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:54.852358" elapsed="0.000448"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.853573" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:54.853319" elapsed="0.000328">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:54.853761" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:54.852986" elapsed="0.000800"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.854358" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:54.853964" elapsed="0.000421"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:59:54.854719" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:59:54.854882" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:59:54.854557" elapsed="0.000416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.855401" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.855146" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.856425" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:54.856160" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.856920" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-25T23:59:54.856624" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.857267" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.857465" elapsed="0.000026"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.857633" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-25T23:59:54.857141" elapsed="0.000566"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-25T23:59:54.856999" elapsed="0.000739"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-25T23:59:54.857786" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T23:59:54.857952" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-25T23:59:54.855887" elapsed="0.002090"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.855541" elapsed="0.002469"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.858172" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:54.858035" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.855517" elapsed="0.002732"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:54.858870" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:54.858406" elapsed="0.000491"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-25T23:59:54.858965" elapsed="0.000030"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-25T23:59:54.851522" elapsed="0.007653"/>
</kw>
<msg time="2026-04-25T23:59:54.859245" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:54.839122" elapsed="0.020191"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.936451" elapsed="0.000061"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:54.976276" elapsed="0.000030"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.016424" elapsed="0.000035"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.016877" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.017131" elapsed="0.000022"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.017987" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.017627" elapsed="0.000485"/>
</branch>
<status status="NOT RUN" start="2026-04-25T23:59:55.017585" elapsed="0.000600"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.018455" elapsed="0.000065"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.018999" elapsed="0.000065"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.019322" elapsed="0.000065"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-25T23:59:55.017545" elapsed="0.001921"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.017389" elapsed="0.002141"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.019691" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.019943" elapsed="0.000022"/>
</return>
<msg time="2026-04-25T23:59:55.020110" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-25T23:59:54.834800" elapsed="0.185338"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:55.022550" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:55.021998" elapsed="0.001009">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:55.023143" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:55.020919" elapsed="0.002263"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.023835" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.023345" elapsed="0.000658"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.025521" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.024736" elapsed="0.000862"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.024030" elapsed="0.001702"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.023324" elapsed="0.002434"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.028376" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:55.025904" elapsed="0.002513"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-25T23:59:55.028559" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T23:59:55.028738" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:55.020553" elapsed="0.008210"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-25T23:59:55.031019" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-25T23:59:55.030411" elapsed="0.000717">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-25T23:59:55.031253" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-25T23:59:55.029414" elapsed="0.001877"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-25T23:59:55.031756" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-04-25T23:59:55.031445" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.031424" elapsed="0.000498"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.032064" elapsed="0.000023"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.032310" elapsed="0.000022"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.032499" elapsed="0.000018"/>
</return>
<msg time="2026-04-25T23:59:55.034537" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-25T23:59:55.029104" elapsed="0.005460"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.036738" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.036268" elapsed="0.000602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.037518" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.037082" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:55.067323" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:55.068781" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Set-Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Fri, 24-Apr-2026 23:59:55 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-25T23:59:55.069448" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:55.040008" elapsed="0.029619"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.037794" elapsed="0.032149"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.070458" elapsed="0.000102"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.070009" elapsed="0.000859"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.037774" elapsed="0.033150"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.080647" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.075084" elapsed="0.005882"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.073872" elapsed="0.007141"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.073757" elapsed="0.007315"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.083932" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.081768" elapsed="0.002253"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.081219" elapsed="0.002847"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.081169" elapsed="0.002956"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.085370" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.084611" elapsed="0.000857"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.086185" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.085619" elapsed="0.000706"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.087113" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.086716" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.086396" elapsed="0.000815"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.085568" elapsed="0.001711"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.088526" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.087818" elapsed="0.000806"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.089342" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.088795" elapsed="0.000662"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.090308" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.089918" elapsed="0.000441"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.089514" elapsed="0.000893"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.088744" elapsed="0.001718"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:55.091313" elapsed="0.000671"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:55.093353" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.092829" elapsed="0.000622"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.094278" elapsed="0.002715"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:55.072010" elapsed="0.025086"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.097440" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.097263" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.097242" elapsed="0.000337"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:55.104047" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:55.097734" elapsed="0.006359"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:55.104245" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T23:59:55.104420" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:55.035118" elapsed="0.069328"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:55.104512" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:59:55.104664" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-25T23:59:54.814343" elapsed="0.290414"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.105089" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.104843" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.104825" elapsed="0.000415"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:55.105279" elapsed="0.000027"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-25T23:59:54.810410" elapsed="0.294995"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:54.805254" elapsed="0.300196"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:54.805238" elapsed="0.300236"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-25T23:59:55.106075" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-25T23:59:55.105969" elapsed="0.000165"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.106194" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.106158" elapsed="0.000075"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.105951" elapsed="0.000304"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.106394" elapsed="0.000021"/>
</kw>
<msg time="2026-04-25T23:59:55.106513" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-25T23:59:55.105741" elapsed="0.000797"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.107113" level="INFO">${cluster_index} = 3</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.106736" elapsed="0.000409"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.107819" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.107292" elapsed="0.000557"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.112968" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.112713" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.113405" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.113160" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:55.124907" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:55.124968" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sat, 25 Apr 2026 23:59:55 GMT', 'Expires': 'Sat, 25 Apr 2026 22:59:55 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Follower","LastApplied":7,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.624","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"356.0 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161595,"status":200} 
 </msg>
<msg time="2026-04-25T23:59:55.125073" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-25T23:59:55.115540" elapsed="0.009559"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.113513" elapsed="0.011629"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.125312" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.125167" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.113496" elapsed="0.011901"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.129280" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6,"InMemoryJournalLogSize":1,"ReplicatedToAllIndex":6,"Leader":"member-1-shard-car-config","LastIndex":7,"RaftState":"Follower","LastApplied":7,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7,"LastLeadershipChangeTime":"2026-04-25 23:43:01.624","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"356.0 μs","CurrentTerm":5,"LastTerm":5,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-1-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":5,"StatRetrievalError":null,"CommitIndex":7,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":1,"InMemoryJournalDataSize":678382},"timestamp":1777161595,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.126450" elapsed="0.003076"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.126234" elapsed="0.003432"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.126216" elapsed="0.003513"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.133303" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.130116" elapsed="0.003366"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.129810" elapsed="0.003809"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.129786" elapsed="0.003872"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.134607" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.133897" elapsed="0.000749"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.135107" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.134788" elapsed="0.000509"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.136298" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.135548" elapsed="0.000791"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.135335" elapsed="0.001115"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.134761" elapsed="0.001713"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.137136" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.136627" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.137461" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.137232" elapsed="0.000367"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.138298" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.137792" elapsed="0.000548"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.137625" elapsed="0.000822"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.137214" elapsed="0.001257"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:59:55.138619" elapsed="0.000665"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-25T23:59:55.140045" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.139441" elapsed="0.000631"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.140218" elapsed="0.002518"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-25T23:59:55.125858" elapsed="0.016945"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.142984" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.142875" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.142856" elapsed="0.000195"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-25T23:59:55.145946" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161595,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-25T23:59:55.143188" elapsed="0.002787"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-25T23:59:55.146027" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:55.146186" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161595,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-25T23:59:55.108661" elapsed="0.037553"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-25T23:59:55.146276" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:59:55.146427" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161595,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-25T23:59:55.108059" elapsed="0.038395"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.147491" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161595, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-25T23:59:55.147046" elapsed="0.000474"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-25T23:59:55.147604" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:55.147815" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161595, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-25T23:59:55.146758" elapsed="0.001087"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.148201" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7, 'CommittedTransactionsCount': 0, 'CurrentTerm': 5, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerInitialS...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.147995" elapsed="0.000234"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.148581" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.148380" elapsed="0.000228"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-25T23:59:55.148654" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T23:59:55.148826" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.803790" elapsed="0.345061"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-25T23:59:55.148909" elapsed="0.000025"/>
</return>
<msg time="2026-04-25T23:59:55.149058" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-25T23:59:54.803051" elapsed="0.346032"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.149372" elapsed="0.000194"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.149161" elapsed="0.000443"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.149781" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.149628" 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-25T23:59:55.149994" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.149860" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.149144" elapsed="0.000923"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:54.802886" elapsed="0.347206"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:54.179630" elapsed="0.970495"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T23:59:55.150167" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T23:59:55.150366" level="INFO">${leader_list} = [1]</msg>
<msg time="2026-04-25T23:59:55.150413" level="INFO">${follower_list} = [2, 3]</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-25T23:59:54.175616" elapsed="0.974820"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.150937" level="INFO">Length is 1.</msg>
<msg time="2026-04-25T23:59:55.151014" level="INFO">${leader_count} = 1</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-25T23:59:55.150602" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.151310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.151105" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.151087" elapsed="0.000299"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.153415" level="INFO">Length is 1.</msg>
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="PASS" start="2026-04-25T23:59:55.151513" elapsed="0.001949"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:59:55.153821" level="INFO">${leader} = 1</msg>
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.153617" elapsed="0.000230"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T23:59:55.153894" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:55.154089" level="INFO">${leader} = 1</msg>
<msg time="2026-04-25T23:59:55.154136" level="INFO">${follower_list} = [2, 3]</msg>
<var>${leader}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="PASS" start="2026-04-25T23:59:54.170573" elapsed="0.983586"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.154720" level="INFO">${car_leader_index} = 1</msg>
<arg>\${${shard_name}_leader_index}</arg>
<arg>${leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.154323" elapsed="0.000441"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.155285" level="INFO">${car_follower_indices} = [2, 3]</msg>
<arg>\${${shard_name}_follower_indices}</arg>
<arg>${follower_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.154917" elapsed="0.000445"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:59:55.155714" level="INFO">${first_follower_index} = 2</msg>
<var>${first_follower_index}</var>
<arg>${follower_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.155511" elapsed="0.000230"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.156296" level="INFO">${car_first_follower_index} = 2</msg>
<arg>\${${shard_name}_first_follower_index}</arg>
<arg>${first_follower_index}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.155921" elapsed="0.000417"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.157143" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.156850" elapsed="0.000319"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:55.157214" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:59:55.157364" level="INFO">${leader_session} = ClusterManagement__session_1</msg>
<var>${leader_session}</var>
<arg>member_index=${leader}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.156544" elapsed="0.000845"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.157922" level="INFO">${car_leader_session} = ClusterManagement__session_1</msg>
<arg>\${${shard_name}_leader_session}</arg>
<arg>${leader_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.157541" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.158344" level="INFO">${sessions} = []</msg>
<var>${sessions}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:55.158107" elapsed="0.000263"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.159348" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.159051" elapsed="0.000323"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:55.159418" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T23:59:55.159567" level="INFO">${follower_session} = ClusterManagement__session_2</msg>
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.158761" elapsed="0.000832"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.159749" elapsed="0.000220"/>
</kw>
<var name="${follower_index}">2</var>
<status status="PASS" start="2026-04-25T23:59:55.158565" elapsed="0.001442"/>
</iter>
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.160873" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.160562" elapsed="0.000337"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:55.160943" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T23:59:55.161092" level="INFO">${follower_session} = ClusterManagement__session_3</msg>
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.160276" elapsed="0.000841"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.161256" elapsed="0.000186"/>
</kw>
<var name="${follower_index}">3</var>
<status status="PASS" start="2026-04-25T23:59:55.160097" elapsed="0.001383"/>
</iter>
<var>${follower_index}</var>
<value>@{follower_list}</value>
<status status="PASS" start="2026-04-25T23:59:55.158421" elapsed="0.003088"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.162038" level="INFO">${car_follower_sessions} = ['ClusterManagement__session_2', 'ClusterManagement__session_3']</msg>
<arg>\${${shard_name}_follower_sessions}</arg>
<arg>${sessions}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.161655" elapsed="0.000425"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:59:55.162408" level="INFO">${first_follower_session} = ClusterManagement__session_2</msg>
<var>${first_follower_session}</var>
<arg>${sessions}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.162225" elapsed="0.000208"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.162982" level="INFO">${car_first_follower_session} = ClusterManagement__session_2</msg>
<arg>\${${shard_name}_first_follower_session}</arg>
<arg>${first_follower_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:59:55.162585" elapsed="0.000439"/>
</kw>
<arg>${SHARD_NAME}</arg>
<arg>shard_type=${SHARD_TYPE}</arg>
<doc>Get leader and followers for given shard name and
set several suite variables related to member indices and sessions.
ClusterManagement Resource is assumed to be initialized.
TODO: car-people shard name causes dash in variable names. Should we convert to underscores?</doc>
<status status="PASS" start="2026-04-25T23:59:54.169875" elapsed="0.993208"/>
</kw>
<doc>Upload the script file and create a virtual env</doc>
<status status="PASS" start="2026-04-25T23:59:45.158912" elapsed="10.004228"/>
</kw>
<test id="s1-s3-t1" name="Start_Adding_Cars_To_Follower" line="47">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T23:59:55.166631" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T23:59:55.166271" elapsed="0.000650"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.167935" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.167824" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.167804" 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-25T23:59:55.172608" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.172463" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.172445" elapsed="0.000267"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.173708" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:59:55.173307" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.174191" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:59:55.173887" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T23:59:55.174261" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:59:55.174416" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-25T23:59:55.172936" elapsed="0.001505"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.179537" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.179429" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.179410" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.180774" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.180644" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.180626" elapsed="0.000216"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.181270" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.180977" elapsed="0.000319"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.181681" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.181448" elapsed="0.000262"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.223110" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:55.182196" elapsed="0.041032"/>
</kw>
<msg time="2026-04-25T23:59:55.223434" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:55.223486" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.181864" elapsed="0.041660"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.268702" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:55.224129" elapsed="0.044694"/>
</kw>
<msg time="2026-04-25T23:59:55.268992" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:55.269041" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.223727" elapsed="0.045352"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.269406" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.269168" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.269143" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.269969" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.269626" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.270324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.270114" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.270096" elapsed="0.000306"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:55.270437" elapsed="0.000035"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.273029" elapsed="0.000147"/>
</kw>
<msg time="2026-04-25T23:59:55.273281" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:55.272014" elapsed="0.001404"/>
</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="NOT RUN" start="2026-04-25T23:59:55.273850" elapsed="0.000094"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.274203" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.271275" elapsed="0.003115"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:55.270734" elapsed="0.003720"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:55.180342" elapsed="0.094211"/>
</kw>
<msg time="2026-04-25T23:59:55.274648" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.274708" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.179777" elapsed="0.094969"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:55.274931" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-25T23:59:55.274822" elapsed="0.000260"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.274804" elapsed="0.000310"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.275517" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.275875" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.275948" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:55.179091" elapsed="0.096965"/>
</kw>
<msg time="2026-04-25T23:59:55.276152" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.276197" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.174810" elapsed="0.101424"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.276552" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.276309" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.276292" elapsed="0.000338"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-25T23:59:55.174661" elapsed="0.101993"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.281789" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.281648" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.281629" elapsed="0.000229"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.283132" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.283024" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.283006" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.283636" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.283340" elapsed="0.000322"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.284057" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.283842" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.324934" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:55.284560" elapsed="0.040497"/>
</kw>
<msg time="2026-04-25T23:59:55.325236" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:55.325282" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.284233" elapsed="0.041086"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.368409" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:55.325883" elapsed="0.042704"/>
</kw>
<msg time="2026-04-25T23:59:55.368772" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:55.368819" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.325497" elapsed="0.043358"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.369171" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.368942" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.368918" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.369704" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.369386" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.370056" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.369848" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.369831" elapsed="0.000303"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:55.370168" elapsed="0.000036"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.372872" elapsed="0.000150"/>
</kw>
<msg time="2026-04-25T23:59:55.373084" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:55.371622" elapsed="0.001597"/>
</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="NOT RUN" start="2026-04-25T23:59:55.373500" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.373947" elapsed="0.000078"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.371011" elapsed="0.003127"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:55.370455" elapsed="0.003748"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:55.282719" elapsed="0.091586"/>
</kw>
<msg time="2026-04-25T23:59:55.374398" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.374442" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.282002" elapsed="0.092478"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:55.374664" elapsed="0.000044"/>
</return>
<status status="PASS" start="2026-04-25T23:59:55.374556" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.374538" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.375157" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.375489" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.375559" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:55.281302" elapsed="0.094362"/>
</kw>
<msg time="2026-04-25T23:59:55.375776" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.375836" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.276930" elapsed="0.098943"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.376188" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.375947" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.375930" elapsed="0.000334"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-25T23:59:55.276797" elapsed="0.099489"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.381410" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.381302" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.381283" elapsed="0.000232"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.382792" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T23:59:55.382660" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.382641" elapsed="0.000220"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.383327" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.382995" elapsed="0.000360"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.383743" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.383507" elapsed="0.000264"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.423262" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:55.384316" elapsed="0.039045"/>
</kw>
<msg time="2026-04-25T23:59:55.423520" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-25T23:59:55.423567" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.383963" elapsed="0.039640"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.459343" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-25T23:59:55.424189" elapsed="0.035287"/>
</kw>
<msg time="2026-04-25T23:59:55.459644" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-25T23:59:55.459711" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.423851" elapsed="0.035899"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.460086" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.459852" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.459814" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.460616" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "S "t "a "r "t "_ "A "d "d "i "n "g "_ "C "a "r "s "_ "T "o "_ "F "o "l "l "o "w "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.460307" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.461012" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.460800" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.460781" elapsed="0.000312"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-25T23:59:55.461129" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-25T23:59:55.463765" elapsed="0.000210"/>
</kw>
<msg time="2026-04-25T23:59:55.464043" level="INFO">Returning from the enclosing user keyword.</msg>
<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-25T23:59:55.462572" elapsed="0.001605"/>
</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="NOT RUN" start="2026-04-25T23:59:55.464464" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.464821" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.461944" elapsed="0.003063"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-25T23:59:55.461391" elapsed="0.003678"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-25T23:59:55.382331" elapsed="0.082839"/>
</kw>
<msg time="2026-04-25T23:59:55.465371" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.465421" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.381662" elapsed="0.083798"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-25T23:59:55.465714" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-25T23:59:55.465580" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.465560" elapsed="0.000239"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.466187" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.466517" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.466588" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-25T23:59:55.380959" elapsed="0.085751"/>
</kw>
<msg time="2026-04-25T23:59:55.466809" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T23:59:55.466853" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.376543" elapsed="0.090346"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.467202" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:59:55.466964" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.466947" elapsed="0.000332"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-25T23:59:55.376411" elapsed="0.090892"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-25T23:59:55.174492" elapsed="0.292841"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-25T23:59:55.172067" elapsed="0.295324"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T23:59:55.167487" elapsed="0.299961"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T23:59:55.167066" elapsed="0.300429"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T23:59:55.163964" elapsed="0.303585"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-25T23:59:55.467943" level="INFO">${idx} = 2</msg>
<var>${idx}</var>
<arg>${car_follower_indices}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.467727" elapsed="0.000243"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-25T23:59:55.468828" level="INFO">${ip_address} = 10.30.171.80</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-25T23:59:55.468524" elapsed="0.000331"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-04-25T23:59:55.468904" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T23:59:55.469054" level="INFO">${follower_ip} = 10.30.171.80</msg>
<var>${follower_ip}</var>
<arg>member_index=${idx}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.468179" elapsed="0.000900"/>
</kw>
<kw name="Start_Tool">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.469966" level="INFO">python cluster_rest_script.py --port 8181 add-with-retries --itemtype car --itemcount 10000 --threads 10</msg>
<arg>${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.469621" elapsed="0.000390"/>
</kw>
<kw name="Virtual_Env_Activate_On_Current_Session" owner="SSHKeywords">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.472299" level="INFO">source /tmp/defaultvenv/bin/activate</msg>
<arg>source ${SSHKeywords__current_venv_path}/bin/activate</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:55.470591" elapsed="0.001762"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.477486" level="INFO">[?2004l[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-25T23:59:55.477586" level="INFO">${output} = [?2004l[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:59:55.472507" elapsed="0.005105"/>
</kw>
<if>
<branch type="IF" condition="${log_output}==${True}">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.478198" level="INFO">[?2004l[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.477948" elapsed="0.000297"/>
</kw>
<status status="PASS" start="2026-04-25T23:59:55.477706" elapsed="0.000571"/>
</branch>
<status status="PASS" start="2026-04-25T23:59:55.477662" elapsed="0.000640"/>
</if>
<arg>log_output=${True}</arg>
<doc>Activates virtual environment. To run anything in the env activated this way you should use SSHLibrary.Write and Read commands.</doc>
<status status="PASS" start="2026-04-25T23:59:55.470243" elapsed="0.008103"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:59:55.482152" level="INFO">python cluster_rest_script.py --port 8181 add-with-retries --itemtype car --itemcount 10000 --threads 10 --host 10.30.171.80  2&gt;&amp;1 | tee cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log</msg>
<msg time="2026-04-25T23:59:55.482244" level="INFO">${output} =  python cluster_rest_script.py --port 8181 add-with-retries --itemtype car --itemcount 10000 --threads 10 --host 10.30.171.80  2&gt;&amp;1 | tee cluster_rest_script.py--controller-rest-clust-cars-perf-tell-t...</msg>
<var>${output}</var>
<arg>${command} ${tool_opt} 2&gt;&amp;1 | tee ${out_file}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-25T23:59:55.478486" elapsed="0.003785"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.482721" level="INFO"> python cluster_rest_script.py --port 8181 add-with-retries --itemtype car --itemcount 10000 --threads 10 --host 10.30.171.80  2&gt;&amp;1 | tee cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log
</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:59:55.482457" elapsed="0.000312"/>
</kw>
<arg>${ADDCMD}</arg>
<arg>--host ${follower_ip} ${TOOL_OPTIONS}</arg>
<doc>Start the tool</doc>
<status status="PASS" start="2026-04-25T23:59:55.469231" elapsed="0.013593"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:59:55.483647" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:59:55.483351" elapsed="0.000336"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-25T23:59:55.483733" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T23:59:55.483911" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${car_leader_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-25T23:59:55.483006" elapsed="0.000931"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Ensure_Cars_Being_Configured">
<kw name="Get_Cars_Count">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:59:55.490393" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01w3hl86qvrzrg1ljsijpmndwxv2241.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-25T23:59:55.490529" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-25T23:59:55.490632" level="FAIL">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.37:8181/rests/data/car:cars?content=config</msg>
<var>${resp}</var>
<arg>${session}</arg>
<arg>url=${CARURL_CONFIG}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:59:55.485383" elapsed="0.005666">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.37:8181/rests/data/car:cars?content=config</status>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${count}</var>
<arg>len(${resp.json()}[car:cars][car-entry])</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.491225" elapsed="0.000023"/>
</kw>
<return>
<value>${count}</value>
<status status="NOT RUN" start="2026-04-25T23:59:55.491292" elapsed="0.000016"/>
</return>
<var>${count1}</var>
<arg>${session}</arg>
<doc>Count car items in config ds.</doc>
<status status="FAIL" start="2026-04-25T23:59:55.485075" elapsed="0.006325">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.37:8181/rests/data/car:cars?content=config</status>
</kw>
<kw name="Get_Cars_Count">
<var>${count2}</var>
<arg>${session}</arg>
<doc>Count car items in config ds.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.491561" elapsed="0.000023"/>
</kw>
<kw name="Should Not Be Equal As Integers" owner="BuiltIn">
<arg>${count1}</arg>
<arg>${count2}</arg>
<doc>Fails if objects are equal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-04-25T23:59:55.491744" elapsed="0.000022"/>
</kw>
<arg>${session}</arg>
<doc>FIXME: Add a documentation.</doc>
<status status="FAIL" start="2026-04-25T23:59:55.484523" elapsed="0.007362">HTTPError: 409 Client Error: Conflict for url: http://10.30.171.37:8181/rests/data/car:cars?content=config</status>
</kw>
<kw name="Ensure_Cars_Being_Configured">
<kw name="Get_Cars_Count">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:00.524869" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01w3hl86qvrzrg1ljsijpmndwxv2241.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:00.529233" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"car:cars":{"car-entry":[{"id":"1673","model":"model1673","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"344","model":"model344","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"447","model":"model447","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1163","model":"model1163","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1660","model":"model1660","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"357","model":"model357","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1150","model":"model1150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1699","model":"model1699","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1181","model":"model1181","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1547","model":"model1547","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1686","model":"model1686","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2130","model":"model2130","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"331","model":"model331","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2041","model":"model2041","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2236","model":"model2236","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"482","model":"model482","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2054","model":"model2054","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2249","model":"model2249","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"495","model":"model495","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1595","model":"model1595","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2254","model":"model2254","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"369","model":"model369","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1582","model":"model1582","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2072","model":"model2072","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2267","model":"model2267","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1773","model":"model1773","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1876","model":"model1876","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"150","model":"model150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1764","model":"model1764","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1867","model":"model1867","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"525","model":"model525","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"664","model":"model664","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"534","model":"model534","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"673","model":"model673","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1738","model":"model1738","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1044","model":"model1044","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"500","model":"model500","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"603","model":"model603","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1729","model":"model1729","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1057","model":"model1057","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"612","model":"model612","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"702","model":"model702","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1712","model":"model1712","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1851","model":"model1851","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1026","model":"model1026","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"629","model":"model629","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"711","model":"model711","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1703","model":"model1703","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1842","model":"model1842","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"906","model":"model906","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1039","model":"model1039","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"638","model":"model638","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1808","model":"model1808","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1408","model":"model1408","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"719","model":"model719","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2413","model":"model2413","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2516","model":"model2516","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2422","model":"model2422","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2525","model":"model2525","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"64","model":"model64","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2579","model":"model2579","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"55","model":"model55","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2449","model":"model2449","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"994","model":"model994","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2553","model":"model2553","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"981","model":"model981","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2562","model":"model2562","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1492","model":"model1492","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1203","model":"model1203","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1212","model":"model1212","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2103","model":"model2103","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1101","model":"model1101","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1110","model":"model1110","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1127","model":"model1127","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1136","model":"model1136","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1239","model":"model1239","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1672","model":"model1672","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"343","model":"model343","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"446","model":"model446","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1162","model":"model1162","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"356","model":"model356","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"459","model":"model459","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1559","model":"model1559","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1698","model":"model1698","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1180","model":"model1180","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1546","model":"model1546","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1685","model":"model1685","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2131","model":"model2131","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"330","model":"model330","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2040","model":"model2040","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2235","model":"model2235","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"483","model":"model483","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2053","model":"model2053","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2248","model":"model2248","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"496","model":"model496","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1596","model":"model1596","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2253","model":"model2253","year":2015,"category":"m... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:00.529806" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${session}</arg>
<arg>url=${CARURL_CONFIG}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:00.494414" elapsed="0.035458"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.619352" level="INFO">${count} = 2579</msg>
<var>${count}</var>
<arg>len(${resp.json()}[car:cars][car-entry])</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:00.530263" elapsed="0.089139"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-26T00:00:00.619482" elapsed="0.000053"/>
</return>
<msg time="2026-04-26T00:00:00.619707" level="INFO">${count1} = 2579</msg>
<var>${count1}</var>
<arg>${session}</arg>
<doc>Count car items in config ds.</doc>
<status status="PASS" start="2026-04-26T00:00:00.493640" elapsed="0.126094"/>
</kw>
<kw name="Get_Cars_Count">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:00.654112" level="INFO">GET Request : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01w3hl86qvrzrg1ljsijpmndwxv2241.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:00.658403" level="INFO">GET Response : url=http://10.30.171.37:8181/rests/data/car:cars?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"car:cars":{"car-entry":[{"id":"1673","model":"model1673","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"344","model":"model344","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"447","model":"model447","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1163","model":"model1163","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1660","model":"model1660","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"357","model":"model357","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1150","model":"model1150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1699","model":"model1699","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1181","model":"model1181","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1547","model":"model1547","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1686","model":"model1686","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2130","model":"model2130","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"331","model":"model331","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2041","model":"model2041","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2236","model":"model2236","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"482","model":"model482","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2054","model":"model2054","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2249","model":"model2249","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"495","model":"model495","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1595","model":"model1595","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2254","model":"model2254","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"369","model":"model369","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1582","model":"model1582","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2072","model":"model2072","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2267","model":"model2267","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1773","model":"model1773","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1876","model":"model1876","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"150","model":"model150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1764","model":"model1764","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1867","model":"model1867","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"525","model":"model525","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"664","model":"model664","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"534","model":"model534","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"673","model":"model673","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1738","model":"model1738","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1044","model":"model1044","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"500","model":"model500","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"603","model":"model603","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1729","model":"model1729","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1057","model":"model1057","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"612","model":"model612","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"702","model":"model702","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1712","model":"model1712","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1851","model":"model1851","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1026","model":"model1026","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"629","model":"model629","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"711","model":"model711","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1703","model":"model1703","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1842","model":"model1842","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"906","model":"model906","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1039","model":"model1039","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"638","model":"model638","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1808","model":"model1808","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1408","model":"model1408","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"719","model":"model719","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2413","model":"model2413","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2516","model":"model2516","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2422","model":"model2422","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2525","model":"model2525","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"64","model":"model64","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2579","model":"model2579","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"55","model":"model55","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2449","model":"model2449","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2588","model":"model2588","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"994","model":"model994","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2553","model":"model2553","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"981","model":"model981","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2562","model":"model2562","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1492","model":"model1492","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1203","model":"model1203","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2605","model":"model2605","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1212","model":"model1212","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2618","model":"model2618","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2103","model":"model2103","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1101","model":"model1101","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1110","model":"model1110","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1127","model":"model1127","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1136","model":"model1136","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1239","model":"model1239","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1672","model":"model1672","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"343","model":"model343","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"446","model":"model446","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1162","model":"model1162","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"356","model":"model356","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"459","model":"model459","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1559","model":"model1559","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1698","model":"model1698","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1180","model":"model1180","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1546","model":"model1546","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1685","model":"model1685","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2131","model":"model2131","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"330","model":"model330","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2040","model":"model2040","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2235","model":"model2235","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"483","model":"model483","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2053","model":"model2053","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2248","model":"model2248","year":2015,"category":... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:00.658957" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${session}</arg>
<arg>url=${CARURL_CONFIG}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:00.620327" elapsed="0.038697"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.746971" level="INFO">${count} = 2648</msg>
<var>${count}</var>
<arg>len(${resp.json()}[car:cars][car-entry])</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:00.659442" elapsed="0.087580"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-26T00:00:00.747099" elapsed="0.000051"/>
</return>
<msg time="2026-04-26T00:00:00.747303" level="INFO">${count2} = 2648</msg>
<var>${count2}</var>
<arg>${session}</arg>
<doc>Count car items in config ds.</doc>
<status status="PASS" start="2026-04-26T00:00:00.619945" elapsed="0.127383"/>
</kw>
<kw name="Should Not Be Equal As Integers" owner="BuiltIn">
<arg>${count1}</arg>
<arg>${count2}</arg>
<doc>Fails if objects are equal after converting them to integers.</doc>
<status status="PASS" start="2026-04-26T00:00:00.747524" elapsed="0.000427"/>
</kw>
<arg>${session}</arg>
<doc>FIXME: Add a documentation.</doc>
<status status="PASS" start="2026-04-26T00:00:00.492568" elapsed="0.255445"/>
</kw>
<arg>10x</arg>
<arg>5s</arg>
<arg>Ensure_Cars_Being_Configured</arg>
<arg>${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T23:59:55.484092" elapsed="5.263969"/>
</kw>
<doc>Start the script to configure 10000 cars in the background.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-25T23:59:55.163250" elapsed="5.584933"/>
</test>
<test id="s1-s3-t2" name="Isolate_Current_Car_Leader" 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-26T00:00:00.752150" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-26T00:00:00.751888" 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-26T00:00:00.753543" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.753406" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.753382" 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-26T00:00:00.758286" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.758178" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.758159" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.759369" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:00.758976" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.759877" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:00.759550" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:00.759948" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:00:00.760107" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:00.758586" elapsed="0.001545"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.765563" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.765455" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.765435" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.766813" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.766703" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.766663" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:00.767323" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:00.767020" elapsed="0.000329"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.767738" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:00.767499" elapsed="0.000265"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.819237" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:00.768244" elapsed="0.051220"/>
</kw>
<msg time="2026-04-26T00:00:00.819723" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:00.819776" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.767916" elapsed="0.051899"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.864301" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:00.820588" elapsed="0.044044"/>
</kw>
<msg time="2026-04-26T00:00:00.864902" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:00.864953" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.820068" elapsed="0.044923"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.865474" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.865139" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.865099" elapsed="0.000467"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.866130" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:00.865726" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.866541" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.866311" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.866292" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:00.866662" elapsed="0.000060"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:00.870030" elapsed="0.000198"/>
</kw>
<msg time="2026-04-26T00:00:00.870307" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:00.868449" elapsed="0.002024"/>
</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="NOT RUN" start="2026-04-26T00:00:00.870915" elapsed="0.000099"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.871389" elapsed="0.000099"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:00.867595" elapsed="0.004043"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:00.866990" elapsed="0.004763"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:00.766379" elapsed="0.105517"/>
</kw>
<msg time="2026-04-26T00:00:00.872167" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:00.872232" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.765793" elapsed="0.106491"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:00.872573" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-04-26T00:00:00.872402" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.872373" elapsed="0.000374"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.873371" elapsed="0.000040"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.873980" elapsed="0.000036"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.874084" elapsed="0.000024"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:00.765109" elapsed="0.109132"/>
</kw>
<msg time="2026-04-26T00:00:00.874384" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:00.874451" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.760506" elapsed="0.114005"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.874992" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.874624" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.874598" elapsed="0.000498"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:00.760370" elapsed="0.114756"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.881392" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.881277" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.881255" elapsed="0.000275"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.882967" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.882832" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.882809" elapsed="0.000244"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:00.883610" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:00.883229" elapsed="0.000414"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.884133" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:00.883852" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.929040" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:00.884683" elapsed="0.044608"/>
</kw>
<msg time="2026-04-26T00:00:00.929531" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:00.929590" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.884330" elapsed="0.045321"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.976609" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:00.930406" elapsed="0.046438"/>
</kw>
<msg time="2026-04-26T00:00:00.977057" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:00.977120" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.929949" elapsed="0.047219"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.977595" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.977287" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.977250" elapsed="0.000456"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:00.978228" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:00.977853" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.978597" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.978381" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.978362" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:00.978741" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:00.981582" elapsed="0.000172"/>
</kw>
<msg time="2026-04-26T00:00:00.981818" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:00.980299" elapsed="0.001655"/>
</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="NOT RUN" start="2026-04-26T00:00:00.982253" elapsed="0.000081"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.982727" elapsed="0.000125"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:00.979634" elapsed="0.003341"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:00.979053" elapsed="0.003994"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:00.882417" elapsed="0.100733"/>
</kw>
<msg time="2026-04-26T00:00:00.983249" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:00.983295" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.881695" elapsed="0.101640"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:00.983528" elapsed="0.000093"/>
</return>
<status status="PASS" start="2026-04-26T00:00:00.983416" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.983397" elapsed="0.000385"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.984206" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.984550" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.984623" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:00.880847" elapsed="0.103907"/>
</kw>
<msg time="2026-04-26T00:00:00.984854" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:00.984899" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.875485" elapsed="0.109451"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:00.985286" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:00.985011" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.984993" elapsed="0.000373"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:00.875299" elapsed="0.110091"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.990821" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.990708" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.990687" elapsed="0.000205"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:00.992097" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:00.991988" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:00.991969" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:00.992607" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:00.992302" elapsed="0.000332"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:00.993029" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:00.992804" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.030282" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:00.993580" elapsed="0.036850"/>
</kw>
<msg time="2026-04-26T00:00:01.030645" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:01.030717" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.993240" elapsed="0.037517"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.072279" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:01.031355" elapsed="0.041053"/>
</kw>
<msg time="2026-04-26T00:00:01.072574" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:01.072621" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:01.030962" elapsed="0.041696"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.073022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.072778" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.072751" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.073599" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "I "s "o "l "a "t "e "_ "C "u "r "r "e "n "t "_ "C "a "r "_ "L "e "a "d "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:01.073285" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.074155" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.073768" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.073747" elapsed="0.000572"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:01.074357" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:01.077037" elapsed="0.000177"/>
</kw>
<msg time="2026-04-26T00:00:01.077279" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:01.075956" elapsed="0.001458"/>
</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="NOT RUN" start="2026-04-26T00:00:01.077711" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.078077" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:01.075259" elapsed="0.003012"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:01.074657" elapsed="0.003680"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:00.991599" elapsed="0.086837"/>
</kw>
<msg time="2026-04-26T00:00:01.078531" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:01.078575" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.991038" elapsed="0.087576"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:01.078820" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:01.078709" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.078689" elapsed="0.000215"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.079301" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.079633" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:01.079725" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:00.990341" elapsed="0.089496"/>
</kw>
<msg time="2026-04-26T00:00:01.079933" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:01.079978" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.985658" elapsed="0.094358"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.080335" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.080091" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.080075" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:00.985523" elapsed="0.094913"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:00.760189" elapsed="0.320282"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:00:00.757775" elapsed="0.322754"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-26T00:00:00.753098" elapsed="0.327489"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:00.752574" elapsed="0.328059"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-26T00:00:00.749501" elapsed="0.331212"/>
</kw>
<kw name="Isolate_Member_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.086202" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:01.085785" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.086754" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:01.086396" elapsed="0.000397"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:01.086842" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:01.087006" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:01.085369" elapsed="0.001699"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.087449" level="INFO">${source} = 10.30.171.37</msg>
<var>${source}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${isolate_member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.087223" elapsed="0.000253"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.091452" level="INFO">${dport} = </msg>
<var>${dport}</var>
<arg>'${port}' != '${EMPTY}'</arg>
<arg>--dport ${port}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:01.087635" elapsed="0.003845"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.092093" level="INFO">${destination} = 10.30.171.37</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.091874" elapsed="0.000245"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.092647" level="INFO">${command} = sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.37 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -I OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:01.092270" elapsed="0.000442"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${isolate_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${isolate_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.093074" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.092785" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.092767" elapsed="0.000435"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:01.091745" elapsed="0.001482"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.093754" level="INFO">${destination} = 10.30.171.80</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.093502" elapsed="0.000278"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.094302" level="INFO">${command} = sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -I OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:01.093929" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${isolate_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.095356" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.095093" elapsed="0.000289"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.096133" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.096233" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:01.096007" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:01.098839" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.098557" elapsed="0.000339"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.098538" elapsed="0.000382"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.099168" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.099268" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:01.099060" elapsed="0.000235"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.099836" level="INFO">Attempting to execute command "sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP" on remote system "10.30.171.37" 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-26T00:00:01.099436" elapsed="0.000446"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.100558" level="INFO">${conn_id} = 26</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-26T00:00:01.100030" elapsed="0.000555"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.101778" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:01.101859" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:01.101241" elapsed="0.000642"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.102072" elapsed="0.000579"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.104708" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:01.425854" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sat Apr 25 23:59:45 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:01.103402" elapsed="0.322623"/>
</kw>
<msg time="2026-04-26T00:00:01.426197" 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="PASS" start="2026-04-26T00:00:01.102834" elapsed="0.323456"/>
</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="PASS" start="2026-04-26T00:00:01.100815" elapsed="0.325592"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.426946" level="INFO">Executing command 'sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP'.</msg>
<msg time="2026-04-26T00:00:01.449700" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:01.450084" level="INFO">${stdout} = </msg>
<msg time="2026-04-26T00:00:01.450192" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:01.426653" elapsed="0.023596"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:01.450765" elapsed="0.000602"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.452521" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:01.451843" elapsed="0.000783"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:01.453155" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:01.452847" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.452795" elapsed="0.000621"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:01.453849" elapsed="0.000073"/>
</return>
<status status="PASS" start="2026-04-26T00:00:01.453552" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.453515" elapsed="0.000547"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:01.454143" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:01.460757" elapsed="0.000411"/>
</kw>
<msg time="2026-04-26T00:00:01.461489" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:01.458654" elapsed="0.002918"/>
</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="NOT RUN" start="2026-04-26T00:00:01.461752" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.461911" elapsed="0.000021"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:01.454744" elapsed="0.007251"/>
</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="PASS" start="2026-04-26T00:00:01.098028" elapsed="0.364061"/>
</kw>
<msg time="2026-04-26T00:00:01.462142" 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="PASS" start="2026-04-26T00:00:01.097468" elapsed="0.364723"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:01.096913" elapsed="0.365356"/>
</kw>
<msg time="2026-04-26T00:00:01.462311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.096409" elapsed="0.365946"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:01.467279" elapsed="0.000152"/>
</kw>
<msg time="2026-04-26T00:00:01.467476" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:01.466467" elapsed="0.001135"/>
</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="NOT RUN" start="2026-04-26T00:00:01.467911" elapsed="0.000027"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.468082" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:01.462644" elapsed="0.005522"/>
</kw>
<msg time="2026-04-26T00:00:01.468261" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:01.095592" elapsed="0.372694"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.468761" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:01.468475" elapsed="0.000329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:01.468850" elapsed="0.000031"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${isolate_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:01.094688" elapsed="0.374290"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:01.094396" elapsed="0.374621"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.094379" elapsed="0.374665"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:01.093356" elapsed="0.375714"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.470392" level="INFO">${destination} = 10.30.170.188</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.469416" elapsed="0.001039"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.472265" level="INFO">${command} = sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -I OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:01.471354" elapsed="0.000973"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${isolate_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.474061" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.473795" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.476094" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.476200" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:01.475949" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:01.478890" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.478593" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.478574" elapsed="0.000399"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.479222" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.479322" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:01.479112" elapsed="0.000237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.479894" level="INFO">Attempting to execute command "sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP" on remote system "10.30.171.37" 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-26T00:00:01.479492" elapsed="0.000450"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.480467" 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-26T00:00:01.480089" elapsed="0.000405"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.485443" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:01.485573" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:01.482504" elapsed="0.003100"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.485973" elapsed="0.001150"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.488866" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:01.800110" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Apr 26 00:00:01 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:01.488090" elapsed="0.312339"/>
</kw>
<msg time="2026-04-26T00:00:01.800794" 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="PASS" start="2026-04-26T00:00:01.487314" elapsed="0.313641"/>
</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="PASS" start="2026-04-26T00:00:01.480737" elapsed="0.320430"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.802144" level="INFO">Executing command 'sudo /sbin/iptables -I OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP'.</msg>
<msg time="2026-04-26T00:00:01.824860" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:01.825128" level="INFO">${stdout} = </msg>
<msg time="2026-04-26T00:00:01.825230" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:01.801663" elapsed="0.023621"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:01.825734" elapsed="0.000493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.827282" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:01.826622" elapsed="0.000757"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:01.827887" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:01.827556" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.827507" elapsed="0.000540"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:01.828405" elapsed="0.000067"/>
</return>
<status status="PASS" start="2026-04-26T00:00:01.828166" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.828132" elapsed="0.000474"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:01.828714" elapsed="0.000035"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:01.834434" elapsed="0.000464"/>
</kw>
<msg time="2026-04-26T00:00:01.835087" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:01.833270" elapsed="0.001917"/>
</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="NOT RUN" start="2026-04-26T00:00:01.835404" elapsed="0.000031"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.835622" elapsed="0.000028"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:01.829498" elapsed="0.006263"/>
</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="PASS" start="2026-04-26T00:00:01.478061" elapsed="0.357829"/>
</kw>
<msg time="2026-04-26T00:00:01.835965" 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="PASS" start="2026-04-26T00:00:01.477431" elapsed="0.358602"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:01.476891" elapsed="0.359251"/>
</kw>
<msg time="2026-04-26T00:00:01.836200" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.476379" elapsed="0.359881"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:01.840765" elapsed="0.000200"/>
</kw>
<msg time="2026-04-26T00:00:01.841026" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:01.840121" elapsed="0.000988"/>
</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="NOT RUN" start="2026-04-26T00:00:01.841350" elapsed="0.000033"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:01.841577" elapsed="0.000028"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:01.836657" elapsed="0.005149"/>
</kw>
<msg time="2026-04-26T00:00:01.841935" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:01.474296" elapsed="0.367676"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.842551" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:01.842221" elapsed="0.000372"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:01.842635" elapsed="0.000028"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${isolate_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:01.473194" elapsed="0.369587"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:01.472504" elapsed="0.370315"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.472445" elapsed="0.370400"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:01.469222" elapsed="0.373648"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:01.091540" elapsed="0.751364"/>
</for>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.843317" level="INFO">${command} = sudo /sbin/iptables -L -n</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -L -n</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:01.843056" elapsed="0.000287"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:01.844306" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:01.844036" elapsed="0.000296"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.845077" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.845177" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:01.844957" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:01.847982" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:01.847560" elapsed="0.000485"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:01.847542" elapsed="0.000527"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.848322" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:01.848423" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:01.848211" elapsed="0.000240"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.849004" level="INFO">Attempting to execute command "sudo /sbin/iptables -L -n" on remote system "10.30.171.37" 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-26T00:00:01.848598" elapsed="0.000452"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.849594" level="INFO">${conn_id} = 28</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-26T00:00:01.849197" elapsed="0.000424"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:01.850524" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:01.850603" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:01.850241" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.850794" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:01.852190" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:02.165944" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Apr 26 00:00:01 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:01.851624" elapsed="0.314476"/>
</kw>
<msg time="2026-04-26T00:00:02.166262" 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="PASS" start="2026-04-26T00:00:01.851274" elapsed="0.315075"/>
</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="PASS" start="2026-04-26T00:00:01.849845" elapsed="0.316617"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.166955" level="INFO">Executing command 'sudo /sbin/iptables -L -n'.</msg>
<msg time="2026-04-26T00:00:02.189667" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:02.189856" level="INFO">${stdout} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<msg time="2026-04-26T00:00:02.189920" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:02.166712" elapsed="0.023241"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:02.190176" elapsed="0.000387"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.191702" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.191003" elapsed="0.000807"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.192279" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.191984" elapsed="0.000438"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.191934" elapsed="0.000563"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:02.192914" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-04-26T00:00:02.192632" elapsed="0.000414"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.192595" elapsed="0.000504"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.193171" elapsed="0.000033"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.199373" elapsed="0.000227"/>
</kw>
<msg time="2026-04-26T00:00:02.199647" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:02.198881" elapsed="0.000855"/>
</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="NOT RUN" start="2026-04-26T00:00:02.199892" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.200047" elapsed="0.000021"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.193926" elapsed="0.006203"/>
</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="PASS" start="2026-04-26T00:00:01.847024" elapsed="0.353206"/>
</kw>
<msg time="2026-04-26T00:00:02.200301" 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="PASS" start="2026-04-26T00:00:01.846445" elapsed="0.353907"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:01.845906" elapsed="0.354527"/>
</kw>
<msg time="2026-04-26T00:00:02.200481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:01.845372" elapsed="0.355153"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.203687" elapsed="0.000144"/>
</kw>
<msg time="2026-04-26T00:00:02.203875" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:02.203183" elapsed="0.000752"/>
</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="NOT RUN" start="2026-04-26T00:00:02.204115" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.204275" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.200831" elapsed="0.003527"/>
</kw>
<msg time="2026-04-26T00:00:02.204454" level="INFO">${output} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:01.844542" elapsed="0.359939"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.204927" level="INFO">Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  10.30.171.37         10.30.170.188       
DROP       all  --  10.30.171.37         10.30.171.80        

Chain DOCKER (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-BRIDGE (1 references)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-CT (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain DOCKER-FORWARD (1 references)
target     prot opt source               destination         
DOCKER-CT  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-INTERNAL  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-BRIDGE  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-INTERNAL (1 references)
target     prot opt source               destination         

Chain DOCKER-USER (1 references)
target     prot opt source               destination         </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.204650" elapsed="0.000375"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:02.205070" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:02.205225" level="INFO">${output} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<var>${output}</var>
<arg>command=${command}</arg>
<arg>member_index=${isolate_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:01.843595" elapsed="0.361657"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.205721" level="INFO">Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  10.30.171.37         10.30.170.188       
DROP       all  --  10.30.171.37         10.30.171.80        

Chain DOCKER (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-BRIDGE (1 references)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-CT (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain DOCKER-FORWARD (1 references)
target     prot opt source               destination         
DOCKER-CT  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-INTERNAL  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-BRIDGE  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-INTERNAL (1 references)
target     prot opt source               destination         

Chain DOCKER-USER (1 references)
target     prot opt source               destination         </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.205416" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.206251" level="INFO">${updated_index_list} = [1, 2, 3]</msg>
<var>${updated_index_list}</var>
<arg>@{index_list}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:02.205926" elapsed="0.000353"/>
</kw>
<kw name="Remove Values From List" owner="Collections">
<arg>${updated_index_list}</arg>
<arg>${isolate_member_index}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:02.206425" elapsed="0.000231"/>
</kw>
<return>
<value>${updated_index_list}</value>
<status status="PASS" start="2026-04-26T00:00:02.206720" elapsed="0.000030"/>
</return>
<arg>${car_leader_index}</arg>
<doc>If the list is empty, isolate member from all ODL instances. Otherwise, isolate member based on present indices.
The KW will return a list of available members: ${updated index_list}=${member_index_list}-${isolate_member_index}</doc>
<status status="PASS" start="2026-04-26T00:00:01.081068" elapsed="1.125802"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.211499" level="INFO">${old_car_leader} = 1</msg>
<arg>${old_car_leader}</arg>
<arg>${car_leader_index}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:02.207061" elapsed="0.004496"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.216194" level="INFO">${old_car_followers} = [2, 3]</msg>
<arg>${old_car_followers}</arg>
<arg>${car_follower_indices}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:02.211766" elapsed="0.004479"/>
</kw>
<doc>Isolating cluster node which is the car shard leader.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-26T00:00:00.748804" elapsed="1.467561"/>
</test>
<test id="s1-s3-t3" name="Verify_New_Car_Leader_Elected" line="61">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-26T00:00:02.219695" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-26T00:00:02.219417" 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-26T00:00:02.223309" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.223185" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.223159" 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-26T00:00:02.228093" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.227961" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.227937" elapsed="0.000230"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.229175" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:02.228781" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.229781" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:02.229390" elapsed="0.000418"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:02.229855" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:02.230014" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:02.228389" elapsed="0.001650"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.235831" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.235714" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.235692" elapsed="0.000212"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.237113" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.237004" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.236986" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:02.237734" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:02.237343" elapsed="0.000420"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.238133" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.237916" elapsed="0.000243"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.276183" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:02.238683" elapsed="0.037611"/>
</kw>
<msg time="2026-04-26T00:00:02.276482" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:02.276529" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.238311" elapsed="0.038255"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.316656" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:02.277123" elapsed="0.039664"/>
</kw>
<msg time="2026-04-26T00:00:02.316949" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:02.316997" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.276765" elapsed="0.040269"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.317335" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.317114" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.317093" elapsed="0.000322"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.317937" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.317586" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.318291" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.318081" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.318064" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:02.318401" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.320920" elapsed="0.000144"/>
</kw>
<msg time="2026-04-26T00:00:02.321126" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:02.319853" elapsed="0.001405"/>
</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="NOT RUN" start="2026-04-26T00:00:02.321550" elapsed="0.000075"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.321895" elapsed="0.000077"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.319223" elapsed="0.002858"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:02.318691" elapsed="0.003513"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:02.236698" elapsed="0.085605"/>
</kw>
<msg time="2026-04-26T00:00:02.322424" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.322469" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.236053" elapsed="0.086454"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:02.322717" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-26T00:00:02.322584" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.322566" elapsed="0.000237"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.323192" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.323521" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.323594" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:02.235318" elapsed="0.088421"/>
</kw>
<msg time="2026-04-26T00:00:02.323837" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.323882" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.230451" elapsed="0.093469"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.324240" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.323997" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.323980" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:02.230302" elapsed="0.094038"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.330050" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.329941" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.329921" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.331402" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.331295" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.331277" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:02.331919" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:02.331605" elapsed="0.000341"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.332306" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.332094" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.368860" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:02.332855" elapsed="0.036174"/>
</kw>
<msg time="2026-04-26T00:00:02.369276" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:02.369347" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.332508" elapsed="0.036894"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.405053" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:02.370228" elapsed="0.035005"/>
</kw>
<msg time="2026-04-26T00:00:02.405535" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:02.405610" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.369712" elapsed="0.035955"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.406220" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.405887" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.405854" elapsed="0.000488"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.406853" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.406521" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.407217" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.407004" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.406985" elapsed="0.000314"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:02.407334" elapsed="0.000030"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.409860" elapsed="0.000154"/>
</kw>
<msg time="2026-04-26T00:00:02.410078" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:02.408786" elapsed="0.001428"/>
</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="NOT RUN" start="2026-04-26T00:00:02.410484" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.410834" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.408148" elapsed="0.002874"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:02.407591" elapsed="0.003497"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:02.330992" elapsed="0.080196"/>
</kw>
<msg time="2026-04-26T00:00:02.411283" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.411329" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.330263" elapsed="0.081104"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:02.411560" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:00:02.411447" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.411427" elapsed="0.000219"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.412054" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.412422" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.412499" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:02.329578" elapsed="0.083031"/>
</kw>
<msg time="2026-04-26T00:00:02.412739" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.412789" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.324604" elapsed="0.088223"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.413155" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.412907" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.412888" elapsed="0.000348"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:02.324470" elapsed="0.088790"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.418836" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.418722" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.418701" elapsed="0.000206"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.420143" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:02.420034" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.420016" elapsed="0.000233"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:02.420721" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:02.420393" elapsed="0.000358"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.421125" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.420905" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.478510" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:02.421731" elapsed="0.056929"/>
</kw>
<msg time="2026-04-26T00:00:02.478903" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:02.478952" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.421307" elapsed="0.057682"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:02.520641" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:02.479582" elapsed="0.041248"/>
</kw>
<msg time="2026-04-26T00:00:02.521066" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:02.521135" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.479190" elapsed="0.041999"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.521764" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.521314" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.521281" elapsed="0.000611"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.522577" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "N "e "w "_ "C "a "r "_ "L "e "a "d "e "r "_ "E "l "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.522127" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.523148" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.522839" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.522812" elapsed="0.000450"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:02.523314" elapsed="0.000047"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:02.526878" elapsed="0.000149"/>
</kw>
<msg time="2026-04-26T00:00:02.527088" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:02.525479" elapsed="0.001740"/>
</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="NOT RUN" start="2026-04-26T00:00:02.527484" elapsed="0.000074"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.527827" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.524522" elapsed="0.003490"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:02.523736" elapsed="0.004341"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:02.419618" elapsed="0.108556"/>
</kw>
<msg time="2026-04-26T00:00:02.528269" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.528314" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.419053" elapsed="0.109300"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:02.528539" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:00:02.528430" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.528412" elapsed="0.000212"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.529035" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.529416" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.529509" elapsed="0.000017"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:02.418352" elapsed="0.111269"/>
</kw>
<msg time="2026-04-26T00:00:02.529751" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:02.529798" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.413541" elapsed="0.116293"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.530153" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.529911" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.529893" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:02.413385" elapsed="0.116869"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:02.230096" elapsed="0.300192"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:00:02.227549" elapsed="0.302830"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-26T00:00:02.222728" elapsed="0.307711"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:02.220131" elapsed="0.310369"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-26T00:00:02.217305" elapsed="0.313255"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Shard_Leader_Elected" owner="ClusterManagement">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.545581" level="INFO">${return_list_reference} = [2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:02.545150" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.546090" level="INFO">${return_list_copy} = [2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:02.545782" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:02.546164" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:02.546320" level="INFO">${index_list} = [2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:02.544782" elapsed="0.001564"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-26T00:00:02.546495" elapsed="0.000189"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.547182" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:02.546840" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.547614" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:02.547367" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.548043" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:02.547799" elapsed="0.000271"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.550538" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:02.550237" elapsed="0.000328"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:02.550610" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:02.550779" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:02.549898" elapsed="0.000906"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.621275" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:02.620881" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:02.622237" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.621933" elapsed="0.000383">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:02.622412" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:02.621465" elapsed="0.000972"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.623008" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:02.622596" elapsed="0.000440"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:00:02.623343" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:00:02.623567" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:00:02.623199" elapsed="0.000395"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.624042" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.623775" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.625092" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.624830" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.625586" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:00:02.625293" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.625966" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.626168" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.626337" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-26T00:00:02.625837" elapsed="0.000556"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.625692" elapsed="0.000732"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:00:02.626467" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:02.626628" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:00:02.624462" elapsed="0.002192"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:02.624165" elapsed="0.002540"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.626872" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.626731" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.624145" elapsed="0.002804"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.627530" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:02.627086" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:00:02.627606" elapsed="0.000029"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:00:02.620141" elapsed="0.007650"/>
</kw>
<msg time="2026-04-26T00:00:02.627865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:02.607145" elapsed="0.020863"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.641362" elapsed="0.000060"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.654543" elapsed="0.000118"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.667754" elapsed="0.000055"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.668121" elapsed="0.000076"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.668433" elapsed="0.000079"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.669289" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.669062" elapsed="0.000295"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:02.669031" elapsed="0.000367"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.669722" elapsed="0.000039"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.670027" elapsed="0.000035"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.670321" elapsed="0.000036"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:00:02.668963" elapsed="0.001443"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.668659" elapsed="0.001821"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.670805" elapsed="0.000076"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.671052" elapsed="0.000019"/>
</return>
<msg time="2026-04-26T00:00:02.671246" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-26T00:00:02.597124" elapsed="0.074151"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:02.673346" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.673006" elapsed="0.000416">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:02.673603" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:02.672146" elapsed="0.001499"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.674950" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:02.673857" elapsed="0.001182"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.675897" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:02.675369" elapsed="0.000575"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:02.675078" elapsed="0.000915"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.673835" elapsed="0.002195"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.679066" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:02.676231" elapsed="0.002877"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:00:02.679241" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:00:02.679474" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:02.671664" elapsed="0.007837"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:02.681445" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.681142" elapsed="0.000373">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:02.681829" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:02.680350" elapsed="0.001523"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-26T00:00:02.682311" elapsed="0.000051"/>
</return>
<status status="PASS" start="2026-04-26T00:00:02.682020" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:02.681999" elapsed="0.000490"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.682692" elapsed="0.000076"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:02.683001" elapsed="0.000073"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:02.683194" elapsed="0.000017"/>
</return>
<msg time="2026-04-26T00:00:02.696234" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:02.679902" elapsed="0.016360"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.699016" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.698410" elapsed="0.000736"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:02.699962" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:02.699369" elapsed="0.000721"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:07.711051" level="FAIL">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.703321" elapsed="5.011943">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:02.700213" elapsed="5.015212">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.716814" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.715505" elapsed="0.001447"/>
</branch>
<status status="FAIL" start="2026-04-26T00:00:02.700193" elapsed="5.016814">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.718230" elapsed="0.000074"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.718654" elapsed="0.000077"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:07.718544" elapsed="0.000338"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.718514" elapsed="0.000423"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.719206" elapsed="0.000107"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.719502" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.696617" elapsed="5.023149">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.719882" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.559197" elapsed="5.160830">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.720409" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.720163" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.720139" elapsed="0.000469"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.720661" elapsed="0.000040"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.554965" elapsed="5.165864">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:02.550888" elapsed="5.170040">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</branch>
<status status="FAIL" start="2026-04-26T00:00:02.550866" elapsed="5.170106">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.721302" elapsed="0.000034"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.721570" elapsed="0.000030"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.721909" elapsed="0.000046"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.722241" elapsed="0.000034"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.722554" elapsed="0.000033"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.722840" elapsed="0.000031"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.723075" elapsed="0.000029"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.723167" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.549249" elapsed="5.174068">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<return>
<value>${raft_state}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.723417" elapsed="0.000022"/>
</return>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.548514" elapsed="5.175039">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.723894" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.723699" 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-26T00:00:07.724195" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.724008" 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-26T00:00:07.724492" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.724303" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.723657" elapsed="0.000940"/>
</if>
<var name="${index}">2</var>
<status status="FAIL" start="2026-04-26T00:00:02.548344" elapsed="5.176313">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:00:02.548123" elapsed="5.176641">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.724842" elapsed="0.000022"/>
</return>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.544038" elapsed="5.180946">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<kw name="Get Length" owner="BuiltIn">
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.725230" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.725540" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.725353" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.725330" elapsed="0.000316"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.725926" 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-26T00:00:07.726254" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.726348" elapsed="0.000021"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-26T00:00:02.541537" elapsed="5.184955">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<if>
<branch type="IF" condition="${new_elected}">
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<arg>${old_leader}</arg>
<arg>${leader}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.726866" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.726616" elapsed="0.000331"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.726593" elapsed="0.000388"/>
</if>
<if>
<branch type="IF" condition="not ${new_elected}">
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${old_leader}</arg>
<arg>${leader}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:07.727247" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:07.727055" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:07.727034" elapsed="0.000324"/>
</if>
<return>
<value>${leader}</value>
<value>${followers}</value>
<status status="NOT RUN" start="2026-04-26T00:00:07.727403" elapsed="0.000020"/>
</return>
<arg>${SHARD_NAME}</arg>
<arg>${SHARD_TYPE}</arg>
<arg>${True}</arg>
<arg>${old_car_leader}</arg>
<arg>member_index_list=${old_car_followers}</arg>
<doc>Verify new leader was elected or remained the same. Bool paramter ${new_elected} indicates if
new leader is elected or should remained the same as ${old_leader}</doc>
<status status="FAIL" start="2026-04-26T00:00:02.540841" elapsed="5.186701">ReadTimeout: HTTPConnectionPool(host='10.30.171.80', port=8181): Read timed out. (read timeout=5.0)</status>
</kw>
<kw name="Verify_Shard_Leader_Elected" owner="ClusterManagement">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.745953" level="INFO">${return_list_reference} = [2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:12.745308" elapsed="0.000690"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.746636" level="INFO">${return_list_copy} = [2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:12.746222" elapsed="0.000469"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:12.746770" elapsed="0.000057"/>
</return>
<msg time="2026-04-26T00:00:12.747006" level="INFO">${index_list} = [2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:12.744805" elapsed="0.002234"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-26T00:00:12.747242" elapsed="0.000233"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.748137" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:12.747698" elapsed="0.000474"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.748707" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:12.748373" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.749260" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:12.748929" elapsed="0.000366"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.752542" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.752153" elapsed="0.000425"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:12.752638" elapsed="0.000058"/>
</return>
<msg time="2026-04-26T00:00:12.752856" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:12.751709" elapsed="0.001180"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.825752" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.825320" elapsed="0.000468"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:12.826553" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:12.826286" elapsed="0.000346">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:12.826829" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:12.825953" elapsed="0.000902"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.827454" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:12.827014" elapsed="0.000468"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:00:12.827801" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:00:12.827958" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:00:12.827638" elapsed="0.000347"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.828392" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.828138" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.829448" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.829186" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.829949" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:00:12.829650" elapsed="0.000326"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.830296" elapsed="0.000023"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.830499" elapsed="0.000026"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.830685" elapsed="0.000023"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-26T00:00:12.830169" elapsed="0.000576"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.830027" elapsed="0.000749"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:00:12.830826" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:00:12.831009" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:00:12.828847" elapsed="0.002211"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.828517" elapsed="0.002577"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.831262" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.831120" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.828494" elapsed="0.002846"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.831941" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.831475" elapsed="0.000494"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:00:12.832017" elapsed="0.000029"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:00:12.824597" elapsed="0.007587"/>
</kw>
<msg time="2026-04-26T00:00:12.832255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:12.811430" elapsed="0.020963"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.845655" elapsed="0.000070"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.858924" elapsed="0.000053"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.872224" elapsed="0.000055"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.872591" elapsed="0.000074"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.872934" elapsed="0.000074"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.873767" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.873522" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:12.873491" elapsed="0.000388"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.874134" elapsed="0.000035"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.874451" elapsed="0.000037"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.874760" elapsed="0.000039"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:00:12.873421" elapsed="0.001428"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.873153" elapsed="0.001767"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.875245" elapsed="0.000076"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.875491" elapsed="0.000020"/>
</return>
<msg time="2026-04-26T00:00:12.875707" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-26T00:00:12.801401" elapsed="0.074334"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:12.877840" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:12.877463" elapsed="0.000452">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:12.878068" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:12.876597" elapsed="0.001511"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.879391" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.878257" elapsed="0.001224"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.880330" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.879828" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.879519" elapsed="0.000909"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.878237" elapsed="0.002226"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.883466" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:12.880659" elapsed="0.002853"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:00:12.883656" elapsed="0.000057"/>
</return>
<msg time="2026-04-26T00:00:12.883926" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:12.876121" elapsed="0.007831"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:12.886201" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:12.885847" elapsed="0.000431">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:12.886502" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:12.885029" elapsed="0.001513"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-26T00:00:12.887035" elapsed="0.000052"/>
</return>
<status status="PASS" start="2026-04-26T00:00:12.886713" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.886690" elapsed="0.000527"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.887444" elapsed="0.000076"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.887775" elapsed="0.000075"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.887970" elapsed="0.000018"/>
</return>
<msg time="2026-04-26T00:00:12.901579" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:12.884350" elapsed="0.017265"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.904371" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.903714" elapsed="0.000796"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.905701" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.905084" elapsed="0.000751"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:12.924562" level="INFO">GET Request : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node010nm13vbqaj8e4vuu4c8k58cv1447.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:12.925666" level="INFO">GET Response : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:12.926487" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:12.909099" elapsed="0.017493"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.905967" elapsed="0.020806"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.928586" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.926874" elapsed="0.001889"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.905944" elapsed="0.022875"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.936852" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.932655" elapsed="0.004533"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.932202" elapsed="0.005082"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.932153" elapsed="0.005207"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.940896" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.937957" elapsed="0.002987"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.937502" elapsed="0.003503"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.937459" elapsed="0.003596"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.941987" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.941410" elapsed="0.000627"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.942451" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.942149" elapsed="0.000384"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.943121" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.942803" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.942581" elapsed="0.000628"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.942117" elapsed="0.001138"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.944166" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.943614" elapsed="0.000599"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.944622" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.944323" elapsed="0.000415"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.945299" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.944989" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.944786" elapsed="0.000602"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.944292" elapsed="0.001143"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:12.945799" elapsed="0.000454"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:12.947050" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.946591" elapsed="0.000506"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:12.947421" elapsed="0.002426"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:12.930138" elapsed="0.019798"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.950322" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:12.950110" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.950089" elapsed="0.000397"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:12.957977" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:12.950692" elapsed="0.007335"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:12.958174" elapsed="0.000044"/>
</return>
<msg time="2026-04-26T00:00:12.958431" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:12.902093" elapsed="0.056366"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:12.958524" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:12.958694" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-26T00:00:12.763688" elapsed="0.195034"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.959091" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.958815" elapsed="0.000416"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.958795" elapsed="0.000463"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:12.959292" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-26T00:00:12.758498" elapsed="0.200922"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.752985" elapsed="0.206480"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.752958" elapsed="0.206532"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-26T00:00:12.960162" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:12.960055" elapsed="0.000166"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-26T00:00:12.960281" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:12.960244" elapsed="0.000076"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.960037" elapsed="0.000305"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.960492" elapsed="0.000022"/>
</kw>
<msg time="2026-04-26T00:00:12.960611" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-26T00:00:12.959763" elapsed="0.000873"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.961241" level="INFO">${cluster_index} = 2</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.960825" elapsed="0.000444"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.961973" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.961419" elapsed="0.000582"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.967582" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.967295" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.968095" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.967823" elapsed="0.000318"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:12.979263" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:12.979376" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sun, 26 Apr 2026 00:00:12 GMT', 'Expires': 'Sat, 25 Apr 2026 23:00:12 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6249,"InMemoryJournalLogSize":1114,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7363,"RaftState":"Follower","LastApplied":7361,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7363,"LastLeadershipChangeTime":"2026-04-26 00:00:11.546","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"2.056 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7361,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1897255},"timestamp":1777161612,"status":200} 
 </msg>
<msg time="2026-04-26T00:00:12.979537" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:12.970163" elapsed="0.009402"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.968209" elapsed="0.011405"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.979897" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.979727" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.968190" elapsed="0.011795"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.988271" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6249,"InMemoryJournalLogSize":1114,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7363,"RaftState":"Follower","LastApplied":7361,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7363,"LastLeadershipChangeTime":"2026-04-26 00:00:11.546","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"2.056 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7361,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1897255},"timestamp":1777161612,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.982036" elapsed="0.006699"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.981352" elapsed="0.007501"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.981312" elapsed="0.007570"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.991931" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:12.989398" elapsed="0.002668"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.988942" elapsed="0.003214"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.988924" elapsed="0.003261"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.992999" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.992366" elapsed="0.000661"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.993689" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.993129" elapsed="0.000744"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.995074" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.994320" elapsed="0.000797"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.993901" elapsed="0.001314"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.993110" elapsed="0.002131"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.995993" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.995395" elapsed="0.000626"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:12.996665" elapsed="0.000147"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:12.996122" elapsed="0.000790"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:12.998102" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:12.997358" elapsed="0.000788"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:12.996940" elapsed="0.001307"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:12.996104" elapsed="0.002168"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:12.998424" elapsed="0.000743"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:12.999956" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:12.999376" elapsed="0.000607"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.000171" elapsed="0.002525"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:12.980531" elapsed="0.022266"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.002985" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.002872" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.002853" elapsed="0.000203"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.017946" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161612,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.003193" elapsed="0.014791"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.018056" elapsed="0.000044"/>
</return>
<msg time="2026-04-26T00:00:13.018245" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161612,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:12.962927" elapsed="0.055345"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.018334" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:13.018490" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161612,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-26T00:00:12.962210" elapsed="0.056307"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.019693" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161612, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.019197" elapsed="0.000526"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-26T00:00:13.019873" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:00:13.020053" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161612, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-26T00:00:13.018804" elapsed="0.001276"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.020434" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7361, 'CommittedTransactionsCount': 0, 'CurrentTerm': 7, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerIniti...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.020230" elapsed="0.000231"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.021111" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.020608" elapsed="0.000529"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-26T00:00:13.021185" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:13.021342" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:12.750901" elapsed="0.270466"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-26T00:00:13.021426" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:00:13.021575" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:12.749882" elapsed="0.271719"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.021926" elapsed="0.000206"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.021707" elapsed="0.000464"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.022334" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.022196" 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-26T00:00:13.022550" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.022412" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.021686" elapsed="0.000939"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:12.749641" elapsed="0.273009"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.025542" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.025051" elapsed="0.000519"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:13.025616" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:13.025788" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.024389" elapsed="0.001430"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.096797" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.096359" elapsed="0.000475"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.097624" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.097338" elapsed="0.000385">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.097820" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.097003" elapsed="0.000842"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.098389" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.098002" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.098727" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:00:13.098894" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:00:13.098567" elapsed="0.000421"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.099386" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.099140" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.100441" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.100181" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.100934" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.100638" elapsed="0.000322"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.101282" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.101482" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.101649" elapsed="0.000037"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.101156" elapsed="0.000569"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.101013" elapsed="0.000743"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:00:13.101807" elapsed="0.000036"/>
</return>
<msg time="2026-04-26T00:00:13.101979" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:00:13.099840" elapsed="0.002164"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.099512" elapsed="0.002525"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.102199" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.102061" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.099486" elapsed="0.002789"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.102871" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.102410" elapsed="0.000488"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.102947" elapsed="0.000028"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:00:13.095613" elapsed="0.007498"/>
</kw>
<msg time="2026-04-26T00:00:13.103182" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.082540" elapsed="0.020780"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.116462" elapsed="0.000059"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.129391" elapsed="0.000053"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.142365" elapsed="0.000062"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.142788" elapsed="0.000076"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.143103" elapsed="0.000075"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.144033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.143804" elapsed="0.000297"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:13.143772" elapsed="0.000370"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.144418" elapsed="0.000036"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.144735" elapsed="0.000035"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.145027" elapsed="0.000035"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.143697" elapsed="0.001415"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.143399" elapsed="0.001784"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.145488" elapsed="0.000077"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.145758" elapsed="0.000020"/>
</return>
<msg time="2026-04-26T00:00:13.145974" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-26T00:00:13.072273" elapsed="0.073729"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.148242" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.147868" elapsed="0.000493">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.148516" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.146913" elapsed="0.001642"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.149826" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.148718" elapsed="0.001196"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.150824" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.150242" elapsed="0.000628"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.149951" elapsed="0.000969"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.148697" elapsed="0.002259"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.153820" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.151147" elapsed="0.002714"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:00:13.153997" elapsed="0.000036"/>
</return>
<msg time="2026-04-26T00:00:13.154237" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.146409" elapsed="0.007854"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.156575" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.156004" elapsed="0.000648">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.156823" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.155208" elapsed="0.001654"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-26T00:00:13.157327" elapsed="0.000054"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.157014" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.156992" elapsed="0.000516"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.157721" elapsed="0.000077"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.158039" elapsed="0.000101"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.158411" elapsed="0.000019"/>
</return>
<msg time="2026-04-26T00:00:13.176944" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.154618" elapsed="0.022386"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.180716" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.179818" elapsed="0.001139"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.183474" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.181474" elapsed="0.002321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.222495" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.223831" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:13.224955" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.190063" elapsed="0.035004"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.184083" elapsed="0.041197"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.227665" elapsed="0.000175"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.225384" elapsed="0.002595"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.184035" elapsed="0.044024"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.234457" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.231563" elapsed="0.003186"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.231228" elapsed="0.003604"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.231193" elapsed="0.003692"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.237553" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.235304" elapsed="0.002298"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.234991" elapsed="0.002673"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.234958" elapsed="0.002920"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.238830" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.238246" elapsed="0.000633"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.239297" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.238991" elapsed="0.000388"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.240142" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.239634" elapsed="0.000537"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.239427" elapsed="0.000805"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.238959" elapsed="0.001318"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.241172" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.240608" elapsed="0.000610"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.241620" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.241327" elapsed="0.000443"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.242389" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.242078" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.241824" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.241296" elapsed="0.001224"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.242872" elapsed="0.000449"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.244124" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.243655" elapsed="0.000516"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.244495" elapsed="0.002428"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.229907" elapsed="0.017106"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.247449" elapsed="0.000042"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.247214" elapsed="0.000366"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.247184" elapsed="0.000434"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.255005" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.247847" elapsed="0.007208"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.255203" elapsed="0.000045"/>
</return>
<msg time="2026-04-26T00:00:13.255469" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.177616" elapsed="0.077881"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.255566" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:13.255765" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.033862" elapsed="0.221931"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.256353" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.255886" elapsed="0.000613"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.255867" elapsed="0.000658"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.256559" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-26T00:00:13.029729" elapsed="0.226972"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.025887" elapsed="0.230873"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.025870" elapsed="0.230915"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-26T00:00:13.257449" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.257328" elapsed="0.000181"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.257569" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.257532" elapsed="0.000075"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.257306" elapsed="0.000323"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.257874" elapsed="0.000023"/>
</kw>
<msg time="2026-04-26T00:00:13.257998" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-26T00:00:13.257025" elapsed="0.000999"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.258623" level="INFO">${cluster_index} = 3</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.258197" elapsed="0.000453"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.259294" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.258820" elapsed="0.000502"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.265630" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.265284" elapsed="0.000427"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.266140" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.265867" elapsed="0.000318"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.280769" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.281174" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sun, 26 Apr 2026 00:00:13 GMT', 'Expires': 'Sat, 25 Apr 2026 23:00:13 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":670,"SnapshotIndex":6251,"InMemoryJournalLogSize":1335,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7586,"RaftState":"Leader","LastApplied":7580,"LastCommittedTransactionTime":"2026-04-26 00:00:13.271","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7586,"LastLeadershipChangeTime":"2026-04-26 00:00:11.543","FollowerInitialSyncStatus":true,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.000","active":false,"matchIndex":-1,"voting":true,"id":"member-1-shard-car-config","nextIndex":6256},{"timeSinceLastActivity":"00:00:00.003","active":true,"matchIndex":7580,"voting":true,"id":"member-2-shard-car-config","nextIndex":7581}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.959 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":1,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":665,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7580,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1934146},"timestamp":1777161613,"status":200} 
 </msg>
<msg time="2026-04-26T00:00:13.281591" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.268324" elapsed="0.013329"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.266264" elapsed="0.015541"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.282259" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.281875" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.266240" elapsed="0.016211"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.290807" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":670,"SnapshotIndex":6251,"InMemoryJournalLogSize":1335,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7586,"RaftState":"Leader","LastApplied":7580,"LastCommittedTransactionTime":"2026-04-26 00:00:13.271","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7586,"LastLeadershipChangeTime":"2026-04-26 00:00:11.543","FollowerInitialSyncStatus":true,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.000","active":false,"matchIndex":-1,"voting":true,"id":"member-1-shard-car-config","nextIndex":6256},{"timeSinceLastActivity":"00:00:00.003","active":true,"matchIndex":7580,"voting":true,"id":"member-2-shard-car-config","nextIndex":7581}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.959 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":1,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":665,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7580,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1934146},"timestamp":1777161613,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.285611" elapsed="0.005357"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.284945" elapsed="0.006126"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.284896" elapsed="0.006206"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.294228" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.291491" elapsed="0.002871"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.291167" elapsed="0.003285"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.291147" elapsed="0.003333"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.295295" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.294687" elapsed="0.000636"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.296008" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.295428" elapsed="0.000762"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.297472" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.296653" elapsed="0.000863"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.296219" elapsed="0.001398"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.295408" elapsed="0.002234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.298613" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.297989" elapsed="0.000651"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.299328" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.298764" elapsed="0.000742"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.300755" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.299979" elapsed="0.000821"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.299535" elapsed="0.001389"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.298744" elapsed="0.002212"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.301123" elapsed="0.000824"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.302720" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.302156" elapsed="0.000591"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.302940" elapsed="0.002554"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.283666" elapsed="0.021930"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.305976" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.305847" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.305654" elapsed="0.000398"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.321174" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.306192" elapsed="0.015020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.321287" elapsed="0.000046"/>
</return>
<msg time="2026-04-26T00:00:13.321477" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.260541" elapsed="0.061035"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.321643" elapsed="0.000316"/>
</return>
<msg time="2026-04-26T00:00:13.322095" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.259531" elapsed="0.062591"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.323344" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.322840" elapsed="0.000533"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-26T00:00:13.323422" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:13.323597" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-26T00:00:13.322401" elapsed="0.001222"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.324016" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7580, 'CommittedTransactionsCount': 665, 'CurrentTerm': 7, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [{'active': Fals...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.323792" elapsed="0.000252"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.324398" level="INFO">${raft_property} = Leader</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.324194" elapsed="0.000230"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-26T00:00:13.324472" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:13.324624" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.023767" elapsed="0.300882"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-26T00:00:13.324726" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:13.324878" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.023019" elapsed="0.301884"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.325228" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.325007" 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="PASS" start="2026-04-26T00:00:13.326135" elapsed="0.000211"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.325309" elapsed="0.001078"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.326555" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.326413" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.324974" elapsed="0.001659"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:13.022849" elapsed="0.303811"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:12.749363" elapsed="0.577348"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.326757" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:13.326988" level="INFO">${leader_list} = [3]</msg>
<msg time="2026-04-26T00:00:13.327036" level="INFO">${follower_list} = [2]</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-26T00:00:12.743850" elapsed="0.583210"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.327532" level="INFO">Length is 1.</msg>
<msg time="2026-04-26T00:00:13.327612" level="INFO">${leader_count} = 1</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:13.327232" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.327957" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.327739" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.327718" elapsed="0.000324"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.330434" level="INFO">Length is 1.</msg>
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="PASS" start="2026-04-26T00:00:13.328253" elapsed="0.002231"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-26T00:00:13.330859" level="INFO">${leader} = 3</msg>
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.330644" elapsed="0.000241"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.330933" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:00:13.331134" level="INFO">${leader} = 3</msg>
<msg time="2026-04-26T00:00:13.331179" level="INFO">${followers} = [2]</msg>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="PASS" start="2026-04-26T00:00:12.740324" elapsed="0.590878"/>
</kw>
<if>
<branch type="IF" condition="${new_elected}">
<kw name="Should Not Be Equal As Numbers" owner="BuiltIn">
<arg>${old_leader}</arg>
<arg>${leader}</arg>
<doc>Fails if objects are equal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:00:13.331464" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.331285" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.331268" elapsed="0.000609"/>
</if>
<if>
<branch type="IF" condition="not ${new_elected}">
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${old_leader}</arg>
<arg>${leader}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.332143" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.331932" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.331916" elapsed="0.000307"/>
</if>
<return>
<value>${leader}</value>
<value>${followers}</value>
<status status="PASS" start="2026-04-26T00:00:13.332255" elapsed="0.000026"/>
</return>
<arg>${SHARD_NAME}</arg>
<arg>${SHARD_TYPE}</arg>
<arg>${True}</arg>
<arg>${old_car_leader}</arg>
<arg>member_index_list=${old_car_followers}</arg>
<doc>Verify new leader was elected or remained the same. Bool paramter ${new_elected} indicates if
new leader is elected or should remained the same as ${old_leader}</doc>
<status status="PASS" start="2026-04-26T00:00:12.739307" elapsed="0.593101"/>
</kw>
<arg>10x</arg>
<arg>5s</arg>
<arg>ClusterManagement.Verify_Shard_Leader_Elected</arg>
<arg>${SHARD_NAME}</arg>
<arg>${SHARD_TYPE}</arg>
<arg>${True}</arg>
<arg>${old_car_leader}</arg>
<arg>member_index_list=${old_car_followers}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-26T00:00:02.530759" elapsed="10.801715"/>
</kw>
<kw name="Set_Tmp_Variables_For_Shard_For_Nodes" owner="CarPeople">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.359423" level="INFO">${return_list_reference} = [2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.358960" elapsed="0.000495"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.359949" level="INFO">${return_list_copy} = [2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:13.359618" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:13.360023" elapsed="0.000039"/>
</return>
<msg time="2026-04-26T00:00:13.360191" level="INFO">${index_list} = [2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:13.358559" 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-26T00:00:13.360364" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.361040" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.360703" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.361733" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:13.361463" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.362165" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:13.361919" elapsed="0.000271"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.364999" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.364420" elapsed="0.000610"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:13.365079" elapsed="0.000038"/>
</return>
<msg time="2026-04-26T00:00:13.365283" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.364079" elapsed="0.001231"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.415717" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.415151" elapsed="0.000623"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.416918" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.416631" elapsed="0.000362">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.417172" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.416140" elapsed="0.001079"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.418166" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.417593" elapsed="0.000620"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.418793" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:00:13.419035" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:00:13.418563" elapsed="0.000518"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.419762" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.419432" elapsed="0.000419"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.420955" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.420697" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.421457" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.421153" elapsed="0.000332"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.421920" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.422122" elapsed="0.000026"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.422290" elapsed="0.000022"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.421788" elapsed="0.000559"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.421537" elapsed="0.000842"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:00:13.422429" elapsed="0.000035"/>
</return>
<msg time="2026-04-26T00:00:13.422601" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:00:13.420359" elapsed="0.002267"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.419980" elapsed="0.002719"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.422953" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.422762" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.419942" elapsed="0.003141"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.424014" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.423402" elapsed="0.000660"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.424145" elapsed="0.000061"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:00:13.413434" elapsed="0.010939"/>
</kw>
<msg time="2026-04-26T00:00:13.424539" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.400028" elapsed="0.024569"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.436969" elapsed="0.000031"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.448839" elapsed="0.000094"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.460787" elapsed="0.000028"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.460993" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.461167" elapsed="0.000021"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.461704" elapsed="0.000085"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.461435" elapsed="0.000439"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:13.461418" elapsed="0.000526"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.462086" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.462393" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.462758" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.461382" elapsed="0.001574"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.461248" elapsed="0.001739"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.463132" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.463211" elapsed="0.000016"/>
</return>
<msg time="2026-04-26T00:00:13.463348" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-26T00:00:13.395820" elapsed="0.067554"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.465023" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.464577" elapsed="0.000604">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.465363" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.464105" elapsed="0.001284"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.465744" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.465460" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.466591" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.466071" elapsed="0.000561"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.465902" elapsed="0.000847"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.465442" elapsed="0.001333"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.469399" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.466922" elapsed="0.002504"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:00:13.469478" elapsed="0.000032"/>
</return>
<msg time="2026-04-26T00:00:13.469691" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.463762" elapsed="0.005956"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.471241" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.470855" elapsed="0.000534">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.471572" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.470409" elapsed="0.001188"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-26T00:00:13.471886" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.471737" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.471650" elapsed="0.000320"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.472109" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.472273" elapsed="0.000021"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.472338" elapsed="0.000015"/>
</return>
<msg time="2026-04-26T00:00:13.474337" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.470090" elapsed="0.004274"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.476041" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.475558" elapsed="0.000532"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.476719" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.476235" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.492416" level="INFO">GET Request : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node010nm13vbqaj8e4vuu4c8k58cv1447.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.492935" level="INFO">GET Response : url=http://10.30.171.80:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:13.493249" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.478957" elapsed="0.014335"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.476833" elapsed="0.016589"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.493624" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.493454" elapsed="0.000389"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.476815" elapsed="0.017053"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.500347" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.496302" elapsed="0.004550"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.495091" elapsed="0.005875"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.495062" elapsed="0.005960"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.505048" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.502394" elapsed="0.002784"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.501153" elapsed="0.004103"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.501128" elapsed="0.004167"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.506636" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.505792" elapsed="0.000938"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.507506" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.506878" elapsed="0.000774"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.508829" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.508169" elapsed="0.000761"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.507708" elapsed="0.001303"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.506858" elapsed="0.002188"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.510326" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.509487" elapsed="0.000909"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.511260" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.510542" elapsed="0.000863"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.512549" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.511916" elapsed="0.000732"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.511444" elapsed="0.001301"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.510522" elapsed="0.002261"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.512967" elapsed="0.000839"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.514523" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.514065" elapsed="0.000529"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.514954" elapsed="0.002342"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.494330" elapsed="0.023108"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.517622" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.517511" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.517492" elapsed="0.000218"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.524386" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.518178" elapsed="0.006239"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.524472" elapsed="0.000035"/>
</return>
<msg time="2026-04-26T00:00:13.524641" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.474740" elapsed="0.049943"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.524753" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:13.524909" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.374050" elapsed="0.150887"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.525264" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.525024" elapsed="0.000351"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.525006" elapsed="0.000395"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.525436" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-26T00:00:13.369636" elapsed="0.155927"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.365389" elapsed="0.160218"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.365368" elapsed="0.160265"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-26T00:00:13.526296" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.526188" elapsed="0.000168"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.526419" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.526380" elapsed="0.000078"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.526170" elapsed="0.000311"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.526621" elapsed="0.000022"/>
</kw>
<msg time="2026-04-26T00:00:13.526792" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-26T00:00:13.525916" elapsed="0.000903"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.527358" level="INFO">${cluster_index} = 2</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.526979" elapsed="0.000406"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.528217" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.527536" elapsed="0.000710"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.533569" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.533318" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.534051" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.533780" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.541456" level="INFO">GET Request : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.541513" level="INFO">GET Response : url=http://10.30.171.80:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sun, 26 Apr 2026 00:00:13 GMT', 'Expires': 'Sat, 25 Apr 2026 23:00:13 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6249,"InMemoryJournalLogSize":1114,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7363,"RaftState":"Follower","LastApplied":7361,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7363,"LastLeadershipChangeTime":"2026-04-26 00:00:11.546","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"2.056 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7361,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1897255},"timestamp":1777161613,"status":200} 
 </msg>
<msg time="2026-04-26T00:00:13.541625" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.536120" elapsed="0.005532"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.534163" elapsed="0.007558"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.541942" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.541748" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.534144" elapsed="0.007887"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.546563" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":0,"SnapshotIndex":6249,"InMemoryJournalLogSize":1114,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7363,"RaftState":"Follower","LastApplied":7361,"LastCommittedTransactionTime":"1970-01-01 00:00:00.000","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-3-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.170.188:2550\/user\/shardmanager-config\/member-3-shard-car-config","LastLogIndex":7363,"LastLeadershipChangeTime":"2026-04-26 00:00:11.546","FollowerInitialSyncStatus":true,"FollowerInfo":[],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"2.056 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":0,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":0,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-3-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7361,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-2-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1897255},"timestamp":1777161613,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.543150" elapsed="0.003585"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.542850" elapsed="0.003939"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.542821" elapsed="0.004006"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.550571" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.547210" elapsed="0.003428"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.546908" elapsed="0.003819"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.546884" elapsed="0.003880"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.551319" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.550937" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.551643" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.551416" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.552346" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.551896" elapsed="0.000476"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.551744" elapsed="0.000665"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.551398" elapsed="0.001033"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.552966" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.552582" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.553284" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.553062" elapsed="0.000279"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.553991" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.553514" elapsed="0.000503"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.553364" elapsed="0.000689"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.553044" elapsed="0.001031"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.554221" elapsed="0.000414"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.555163" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.554824" elapsed="0.000366"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.555340" elapsed="0.005879"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.542381" elapsed="0.018906"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.561467" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.561357" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.561338" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.564363" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.561689" elapsed="0.002704"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.564444" elapsed="0.000034"/>
</return>
<msg time="2026-04-26T00:00:13.564607" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.529142" elapsed="0.035492"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.564709" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:13.564861" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.528458" elapsed="0.036429"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.565934" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.565453" elapsed="0.000512"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-26T00:00:13.566062" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:00:13.566241" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-2-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-26T00:00:13.565109" elapsed="0.001159"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.566619" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7361, 'CommittedTransactionsCount': 0, 'CurrentTerm': 7, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [], 'FollowerIniti...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.566418" elapsed="0.000228"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.567215" level="INFO">${raft_property} = Follower</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.567011" elapsed="0.000230"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-26T00:00:13.567288" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:13.567440" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.363457" elapsed="0.204008"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-26T00:00:13.567523" elapsed="0.000025"/>
</return>
<msg time="2026-04-26T00:00:13.567686" level="INFO">${raft_state} = Follower</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.362644" elapsed="0.205069"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.568005" elapsed="0.000194"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.567793" elapsed="0.000445"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.568399" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.568263" 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-26T00:00:13.568614" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.568479" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.567776" elapsed="0.000930"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:13.362463" elapsed="0.206270"/>
</iter>
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.571201" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.570887" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:13.571275" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:13.571424" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.570447" elapsed="0.001003"/>
</kw>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.622071" level="INFO">${file_path_stream} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.621474" elapsed="0.000716"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.623331" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.623038" elapsed="0.000370">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules.chromium/location.uri' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.623590" level="INFO">${file_stream_exists} = False</msg>
<var>${file_stream_exists}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${file_path_stream}</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.622600" elapsed="0.001036"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.624609" level="INFO">${file_path} = /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/location.uri</msg>
<var>${file_path}</var>
<arg>${file_stream_exists}</arg>
<arg>${file_path_stream}</arg>
<arg>${folder}${/}${file_name}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.624049" elapsed="0.000613"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.625258" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri"&gt;/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-04-26T00:00:13.625509" level="INFO">${template} = /rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-26T00:00:13.625052" elapsed="0.000579"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.626439" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.626015" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.627799" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.627447" elapsed="0.000400"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.628286" level="INFO">${encoded_mapping} = {}</msg>
<var>${encoded_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.628005" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.628637" elapsed="0.000022"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.628861" elapsed="0.000026"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.629033" elapsed="0.000021"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.628509" elapsed="0.000582"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.628365" elapsed="0.000756"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-04-26T00:00:13.629170" elapsed="0.000034"/>
</return>
<msg time="2026-04-26T00:00:13.629341" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-04-26T00:00:13.627106" elapsed="0.002261"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.626684" elapsed="0.002743"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.629699" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.629489" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.626630" elapsed="0.003211"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.630839" level="INFO">${final_text} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${final_text}</var>
<arg>string.Template('''${template}'''.rstrip()).safe_substitute(${mapping_to_use})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.630214" elapsed="0.000674"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.630974" elapsed="0.000063"/>
</return>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="PASS" start="2026-04-26T00:00:13.619561" elapsed="0.011646"/>
</kw>
<msg time="2026-04-26T00:00:13.631379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>not "${iterations}"</arg>
<arg>Resolve_Text_From_Template_File</arg>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.605701" elapsed="0.025738"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${prolog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.prolog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.646871" elapsed="0.000059"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.659079" elapsed="0.000038"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${item_template}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${base_name}.item.${extension}</arg>
<arg>mapping=${mapping}</arg>
<doc>Check if /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name} exists. If yes read and Log contents of file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules.chromium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.671247" elapsed="0.000030"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.671482" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.671665" elapsed="0.000043"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.672274" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.672053" elapsed="0.000387"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:13.672033" elapsed="0.000478"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<var>${j}</var>
<arg>${iteration}+${iter_j_offset}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.672656" elapsed="0.000040"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${item}</var>
<arg>string.Template('''${item_template}''').substitute({"i":"${iteration}", "j":${j}})</arg>
<arg>modules=string</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.672994" elapsed="0.000022"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${item}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.673361" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-04-26T00:00:13.671992" elapsed="0.001569"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.671849" elapsed="0.001744"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.673756" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.673845" elapsed="0.000018"/>
</return>
<msg time="2026-04-26T00:00:13.674002" level="INFO">${uri} = /rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-04-26T00:00:13.601501" elapsed="0.072528"/>
</kw>
<kw name="Resolve_Jmes_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.675880" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</msg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.675410" elapsed="0.000631">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.676229" level="INFO">${read_jmes_file} = False</msg>
<var>${read_jmes_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.674805" elapsed="0.001450"/>
</kw>
<if>
<branch type="IF" condition="${read_jmes_file} == ${true}">
<kw name="Get File" owner="OperatingSystem">
<var>${jmes_expression}</var>
<arg>${folder}${/}jmespath.expr</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.676592" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.676328" elapsed="0.000420"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.677501" level="INFO">${jmes_expression} = None</msg>
<var>${jmes_expression}</var>
<arg>${None}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.676955" elapsed="0.000589"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.676776" elapsed="0.000869"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.676309" elapsed="0.001378"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.680371" level="INFO">${expression} = </msg>
<var>${expression}</var>
<arg>${read_jmes_file} == ${true}</arg>
<arg>${jmes_expression}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.677837" elapsed="0.002561"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-04-26T00:00:13.680452" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:00:13.680614" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.674417" elapsed="0.006222"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-04-26T00:00:13.682247" level="FAIL">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-04-26T00:00:13.681774" elapsed="0.000675">File '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/variables/restconf/modules/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-04-26T00:00:13.682635" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-26T00:00:13.681326" elapsed="0.001335"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-04-26T00:00:13.682892" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.682752" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.682732" elapsed="0.000245"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.683116" elapsed="0.000022"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.683283" elapsed="0.000020"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.683393" elapsed="0.000017"/>
</return>
<msg time="2026-04-26T00:00:13.685469" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/test/csit/libraries/../variables/restconf/modules/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-04-26T00:00:13.680986" elapsed="0.004511"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.687224" level="INFO">/rests/data/ietf-yang-library:modules-state?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.686800" elapsed="0.000473"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.687893" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.687419" elapsed="0.000519"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.712293" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 path_url=/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.713587" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/ietf-yang-library:modules-state?content=nonconfig 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifi... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:13.714364" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.690098" elapsed="0.024372"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.688007" elapsed="0.026859"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.715439" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.714944" elapsed="0.000954"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.687987" elapsed="0.027974"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.722838" level="INFO">{"ietf-yang-library:modules-state":{"module":[{"name":"nc-notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/nc-notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"car-people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people","conformance-type":"import"},{"name":"ietf-crypto-types_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-crypto-types?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-crypto-types","conformance-type":"import","feature":["one-asymmetric-key-format","hidden-private-keys","cleartext-passwords","one-symmetric-key-format","p10-csr-format","encrypted-symmetric-keys","cleartext-symmetric-keys","csr-generation","cms-enveloped-data-format","encrypted-passwords","hidden-symmetric-keys","encrypted-private-keys","asymmetrically-encrypted-value-format","cleartext-private-keys","cms-encrypted-data-format","symmetrically-encrypted-value-format","certificate-expiration-notification"]},{"name":"ietf-tls-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-common","conformance-type":"import","feature":["tls12","hello-params","tls13"]},{"name":"ietf-http-client_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-client?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-client","conformance-type":"import","feature":["basic-auth","tcp-supported","tls-supported"]},{"name":"distributed-datastore-provider_2025-01-30","revision":"2025-01-30","schema":"/rests/modules/distributed-datastore-provider?revision=2025-01-30","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"ietf-datastores_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-datastores?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"import"},{"name":"odl-controller-cds-types_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/odl-controller-cds-types?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:cds:types","conformance-type":"import"},{"name":"aaa-app-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-app-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:app:config","conformance-type":"import"},{"name":"ietf-tls-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-server","conformance-type":"import","feature":["server-ident-x509-cert","client-auth-x509-cert","client-auth-supported"]},{"name":"ietf-restconf-server_2024-08-14","revision":"2024-08-14","schema":"/rests/modules/ietf-restconf-server?revision=2024-08-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-server","conformance-type":"import","feature":["http-listen","https-listen"]},{"name":"ietf-truststore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-truststore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-truststore","conformance-type":"import","feature":["inline-definitions-supported"]},{"name":"odl-mdsal-lowlevel-control_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-control?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:control","conformance-type":"import"},{"name":"sal-remote_2014-01-14","revision":"2014-01-14","schema":"/rests/modules/sal-remote?revision=2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"aaa-encrypt-service-config_2024-02-02","revision":"2024-02-02","schema":"/rests/modules/aaa-encrypt-service-config?revision=2024-02-02","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"iana-ssh-encryption-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-encryption-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs","conformance-type":"import"},{"name":"ietf-tcp-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-server","conformance-type":"import","feature":["tcp-server-keepalives"]},{"name":"odl-entity-owners","revision":"","schema":"/rests/modules/odl-entity-owners","namespace":"urn:opendaylight:params:xml:ns:yang:controller:entity-owners","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-common_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-common?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:common","conformance-type":"import"},{"name":"iana-ssh-mac-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-mac-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs","conformance-type":"import"},{"name":"ietf-yang-patch_2017-02-22","revision":"2017-02-22","schema":"/rests/modules/ietf-yang-patch?revision=2017-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-patch","conformance-type":"import"},{"name":"ietf-ip_2018-02-22","revision":"2018-02-22","schema":"/rests/modules/ietf-ip?revision=2018-02-22","namespace":"urn:ietf:params:xml:ns:yang:ietf-ip","conformance-type":"import","feature":["ipv6-privacy-autoconf","ipv4-non-contiguous-netmasks"]},{"name":"ietf-http-server_2024-02-08","revision":"2024-02-08","schema":"/rests/modules/ietf-http-server?revision=2024-02-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-http-server","conformance-type":"import","feature":["tcp-supported","tls-supported"]},{"name":"ietf-ssh-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-client","conformance-type":"import","feature":["client-ident-hostbased","ssh-client-keepalives","client-ident-publickey","client-ident-password"]},{"name":"aaa-cert-mdsal_2016-03-21","revision":"2016-03-21","schema":"/rests/modules/aaa-cert-mdsal?revision=2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"iana-crypt-hash_2014-08-06","revision":"2014-08-06","schema":"/rests/modules/iana-crypt-hash?revision=2014-08-06","namespace":"urn:ietf:params:xml:ns:yang:iana-crypt-hash","conformance-type":"import","feature":["crypt-hash-sha-512","crypt-hash-sha-256","crypt-hash-md5"]},{"name":"basic-rpc-test_2016-01-20","revision":"2016-01-20","schema":"/rests/modules/basic-rpc-test?revision=2016-01-20","namespace":"urn:opendaylight:controller:basic-rpc-test","conformance-type":"import"},{"name":"ietf-restconf_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-netconf_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import","feature":["xpath","url","rollback-on-error","validate","startup","candidate","confirmed-commit","writable-running"]},{"name":"aaa_2016-12-14","revision":"2016-12-14","schema":"/rests/modules/aaa?revision=2016-12-14","namespace":"urn:opendaylight:params:xml:ns:yang:aaa","conformance-type":"import"},{"name":"ietf-yang-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-yang-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"aaa-cert_2015-11-26","revision":"2015-11-26","schema":"/rests/modules/aaa-cert?revision=2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"iana-ssh-public-key-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-public-key-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs","conformance-type":"import"},{"name":"iana-tls-cipher-suite-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-tls-cipher-suite-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs","conformance-type":"import"},{"name":"ietf-netconf-with-defaults_2011-06-01","revision":"2011-06-01","schema":"/rests/modules/ietf-netconf-with-defaults?revision=2011-06-01","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults","conformance-type":"import"},{"name":"ietf-tcp-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-client","conformance-type":"import","feature":["local-binding-supported","tcp-client-keepalives"]},{"name":"ietf-origin_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-origin?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-origin","conformance-type":"import"},{"name":"odl-mdsal-lowlevel-target_2017-02-15","revision":"2017-02-15","schema":"/rests/modules/odl-mdsal-lowlevel-target?revision=2017-02-15","namespace":"tag:opendaylight.org,2017:controller:yang:lowlevel:target","conformance-type":"import"},{"name":"notifications_2008-07-14","revision":"2008-07-14","schema":"/rests/modules/notifications?revision=2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"people_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/people?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people","conformance-type":"import"},{"name":"ietf-subscribed-notifications_2019-09-09","revision":"2019-09-09","schema":"/rests/modules/ietf-subscribed-notifications?revision=2019-09-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications","conformance-type":"import","feature":["subtree","encode-xml","encode-json"]},{"name":"odl-device-notification_2024-02-18","revision":"2024-02-18","schema":"/rests/modules/odl-device-notification?revision=2024-02-18","namespace":"urn:opendaylight:device:notification","conformance-type":"import"},{"name":"car_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car","conformance-type":"import"},{"name":"ietf-restconf-monitoring_2017-01-26","revision":"2017-01-26","schema":"/rests/modules/ietf-restconf-monitoring?revision=2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"yang-ext_2013-07-09","revision":"2013-07-09","schema":"/rests/modules/yang-ext?revision=2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"ietf-ssh-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-common","conformance-type":"import","feature":["ssh-x509-certs","transport-params"]},{"name":"ietf-ssh-server_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-ssh-server?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-ssh-server","conformance-type":"import","feature":["local-users-supported","local-user-auth-publickey","local-user-auth-password","local-user-auth-hostbased","ssh-server-keepalives"]},{"name":"car-purchase_2014-08-18","revision":"2014-08-18","schema":"/rests/modules/car-purchase?revision=2014-08-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase","conformance-type":"import"},{"name":"ietf-inet-types_2013-07-15","revision":"2013-07-15","schema":"/rests/modules/ietf-inet-types?revision=2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"ietf-interfaces_2018-02-20","revision":"2018-02-20","schema":"/rests/modules/ietf-interfaces?revision=2018-02-20","namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import","feature":["pre-provisioning","arbitrary-names","if-mib"]},{"name":"aaa-password-service-config_2017-06-19","revision":"2017-06-19","schema":"/rests/modules/aaa-password-service-config?revision=2017-06-19","namespace":"urn:opendaylight:aaa:password:service:config","conformance-type":"import"},{"name":"ietf-network-instance_2019-01-21","revision":"2019-01-21","schema":"/rests/modules/ietf-network-instance?revision=2019-01-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-instance","conformance-type":"import"},{"name":"odl-general-entity_2015-09-30","revision":"2015-09-30","schema":"/rests/modules/odl-general-entity?revision=2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"ietf-yang-metadata_2016-08-05","revision":"2016-08-05","schema":"/rests/modules/ietf-yang-metadata?revision=2016-08-05","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-metadata","conformance-type":"import"},{"name":"ietf-restconf-subscribed-notifications_2019-11-17","revision":"2019-11-17","schema":"/rests/modules/ietf-restconf-subscribed-notifications?revision=2019-11-17","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications","conformance-type":"import"},{"name":"ietf-tcp-common_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tcp-common?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tcp-common","conformance-type":"import","feature":["keepalives-supported"]},{"name":"ietf-netconf-notifications_2012-02-06","revision":"2012-02-06","schema":"/rests/modules/ietf-netconf-notifications?revision=2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"cluster-admin_2025-01-31","revision":"2025-01-31","schema":"/rests/modules/cluster-admin?revision=2025-01-31","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"ietf-yang-library_2019-01-04","revision":"2019-01-04","schema":"/rests/modules/ietf-yang-library?revision=2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"ietf-tls-client_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-tls-client?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-tls-client","conformance-type":"import","feature":["client-ident-x509-cert","server-auth-x509-cert"]},{"name":"sal-remote-augment_2023-11-03","revision":"2023-11-03","schema":"/rests/modules/sal-remote-augment?revision=2023-11-03","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"aaa-cert-rpc_2015-12-15","revision":"2015-12-15","schema":"/rests/modules/aaa-cert-rpc?revision=2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"ietf-netconf-acm_2018-02-14","revision":"2018-02-14","schema":"/rests/modules/ietf-netconf-acm?revision=2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-acm","conformance-type":"import"},{"name":"ietf-keystore_2024-10-10","revision":"2024-10-10","schema":"/rests/modules/ietf-keystore?revision=2024-10-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-keystore","conformance-type":"import","feature":["asymmetric-keys","inline-definitions-supported"]},{"name":"ietf-yang-schema-mount_2019-01-14","revision":"2019-01-14","schema":"/rests/modules/ietf-yang-schema-mount?revision=2019-01-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount","conformance-type":"import"},{"name":"ietf-netconf-nmda_2019-01-07","revision":"2019-01-07","schema":"/rests/modules/ietf-netconf-nmda?revision=2019-01-07","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-nmda","conformance-type":"import","feature":["with-defaults","origin"]},{"name":"ietf-x509-cert-to-name_2014-12-10","revision":"2014-12-10","schema":"/rests/modules/ietf-x509-cert-to-name?revision=2014-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name","conformance-type":"import"},{"name":"iana-ssh-key-exchange-algs_2024-10-16","revision":"2024-10-16","schema":"/rests/modules/iana-ssh-key-exchange-algs?revision=2024-10-16","namespace":"urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs","conformance-type":"import"},{"name":"odl-codegen-extensions_2024-06-27","revision":"2024-06-27","schema":"/rests/modules/odl-codegen-extensions?revision=2024-06-27","namespace":"urn:opendaylight:yang:extension:codegen","conformance-type":"import"}],"module-set-id":"2"}}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.719765" elapsed="0.003390"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.718861" elapsed="0.004380"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.718823" elapsed="0.004462"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.726786" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.724270" elapsed="0.002650"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.723382" elapsed="0.003619"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.723363" elapsed="0.003680"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.728373" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.727517" elapsed="0.000927"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.729357" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.728594" elapsed="0.000911"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.730764" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.730078" elapsed="0.000787"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.729545" elapsed="0.001402"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.728574" elapsed="0.002411"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.732229" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.731420" elapsed="0.000877"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.733163" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.732445" elapsed="0.000865"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.734457" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.733822" elapsed="0.000767"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.733350" elapsed="0.001337"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.732425" elapsed="0.002303"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.734920" elapsed="0.000880"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.736528" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.736064" elapsed="0.000534"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.736945" elapsed="0.002371"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.717109" elapsed="0.022352"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.739652" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.739536" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.739517" elapsed="0.000227"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.746578" level="INFO">${text_normalized} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.739888" elapsed="0.006750"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.746722" elapsed="0.000043"/>
</return>
<msg time="2026-04-26T00:00:13.746912" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.685882" elapsed="0.061057"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.747005" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:00:13.747157" level="INFO">${response_text} = {
 "ietf-yang-library:modules-state": {
  "module": [
   {
    "conformance-type": "import",
    "feature": [
     "arbitrary-names",
     "if-mib",
     "pre-provisioning"
    ],
    "name": "ietf-in...</msg>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.579907" elapsed="0.167277"/>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.747547" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.747274" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.747255" elapsed="0.000469"/>
</if>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.747759" elapsed="0.000026"/>
</return>
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="PASS" start="2026-04-26T00:00:13.575623" elapsed="0.172265"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.571519" elapsed="0.176414"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.571501" elapsed="0.176456"/>
</if>
<kw name="Resolve_Shard_Type_Class" owner="ClusterManagement">
<if>
<branch type="IF" condition="'${shard_type}' == 'config'">
<return>
<value>DistributedConfigDatastore</value>
<status status="PASS" start="2026-04-26T00:00:13.748635" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.748525" elapsed="0.000222"/>
</branch>
<branch type="ELSE IF" condition="'${shard_type}' == 'operational'">
<return>
<value>DistributedOperationalDatastore</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.748811" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.748772" elapsed="0.000082"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.748508" elapsed="0.000369"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized shard type: ${shard_type}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.749027" elapsed="0.000022"/>
</kw>
<msg time="2026-04-26T00:00:13.749148" level="INFO">${type_class} = DistributedConfigDatastore</msg>
<var>${type_class}</var>
<arg>shard_type=${shard_type}</arg>
<doc>Simple lookup for class name corresponding to desired type.</doc>
<status status="PASS" start="2026-04-26T00:00:13.748192" elapsed="0.000981"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.749778" level="INFO">${cluster_index} = 3</msg>
<var>${cluster_index}</var>
<arg>${member_index}+${NODE_ROLE_INDEX_START}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.749342" elapsed="0.000463"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.750414" level="INFO">${uri} = jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<var>${uri}</var>
<arg>${JOLOKIA_READ_URI}:Category=Shards,name=member-${cluster_index}-shard-${shard_name}-${shard_type},type=${type_class}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.749953" elapsed="0.000488"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.755975" level="INFO">jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.755707" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.756417" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.756168" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:13.765318" level="INFO">GET Request : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:13.765398" level="INFO">GET Response : url=http://10.30.170.188:8181/jolokia/read/org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Sun, 26 Apr 2026 00:00:13 GMT', 'Expires': 'Sat, 25 Apr 2026 23:00:13 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":906,"SnapshotIndex":6251,"InMemoryJournalLogSize":1335,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7586,"RaftState":"Leader","LastApplied":7580,"LastCommittedTransactionTime":"2026-04-26 00:00:13.761","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7586,"LastLeadershipChangeTime":"2026-04-26 00:00:11.543","FollowerInitialSyncStatus":true,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.000","active":false,"matchIndex":-1,"voting":true,"id":"member-1-shard-car-config","nextIndex":6256},{"timeSinceLastActivity":"00:00:00.003","active":true,"matchIndex":7580,"voting":true,"id":"member-2-shard-car-config","nextIndex":7581}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.959 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":8,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":898,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7580,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1934146},"timestamp":1777161613,"status":200} 
 </msg>
<msg time="2026-04-26T00:00:13.765522" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:13.758523" elapsed="0.007040"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.756526" elapsed="0.009085"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.765817" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.765636" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.756508" elapsed="0.009395"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.772344" level="INFO">{"request":{"mbean":"org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore","type":"read"},"value":{"ReadWriteTransactionCount":906,"SnapshotIndex":6251,"InMemoryJournalLogSize":1335,"ReplicatedToAllIndex":-1,"Leader":"member-3-shard-car-config","LastIndex":7586,"RaftState":"Leader","LastApplied":7580,"LastCommittedTransactionTime":"2026-04-26 00:00:13.761","PeerAddresses":"member-1-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.37:2550\/user\/shardmanager-config\/member-1-shard-car-config, member-2-shard-car-config: pekko:\/\/opendaylight-cluster-data@10.30.171.80:2550\/user\/shardmanager-config\/member-2-shard-car-config","LastLogIndex":7586,"LastLeadershipChangeTime":"2026-04-26 00:00:11.543","FollowerInitialSyncStatus":true,"FollowerInfo":[{"timeSinceLastActivity":"00:00:00.000","active":false,"matchIndex":-1,"voting":true,"id":"member-1-shard-car-config","nextIndex":6256},{"timeSinceLastActivity":"00:00:00.003","active":true,"matchIndex":7580,"voting":true,"id":"member-2-shard-car-config","nextIndex":7581}],"FailedReadTransactionsCount":0,"Voting":true,"StatRetrievalTime":"1.959 ms","CurrentTerm":7,"LastTerm":7,"FailedTransactionsCount":0,"PendingTxCommitQueueSize":8,"VotedFor":"member-3-shard-car-config","SnapshotCaptureInitiated":false,"CommittedTransactionsCount":898,"TxCohortCacheSize":0,"PeerVotingStates":"member-1-shard-car-config: true, member-2-shard-car-config: true","LastLogTerm":7,"StatRetrievalError":null,"CommitIndex":7580,"SnapshotTerm":5,"AbortTransactionsCount":0,"ReadOnlyTransactionCount":0,"ShardName":"member-3-shard-car-config","LeadershipChangeCount":3,"InMemoryJournalDataSize":1934146},"timestamp":1777161613,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.767108" elapsed="0.005325"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.766887" elapsed="0.005598"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.766866" elapsed="0.005655"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.776243" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.772937" elapsed="0.003354"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.772602" elapsed="0.003725"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.772577" elapsed="0.003775"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.776935" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.776516" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.777265" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.777033" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.777980" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.777500" elapsed="0.000507"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.777348" elapsed="0.000696"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.777015" elapsed="0.001051"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.778583" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.778216" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.779023" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.778782" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.779725" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.779255" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.779106" elapsed="0.000683"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.778662" elapsed="0.001149"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:13.779959" elapsed="0.000383"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-26T00:00:13.780855" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.780499" elapsed="0.000382"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.781030" elapsed="0.005945"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-26T00:00:13.766259" elapsed="0.020787"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.787231" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.787120" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.787099" elapsed="0.000204"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-26T00:00:13.790354" level="INFO">${text_normalized} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-26T00:00:13.787530" elapsed="0.002855"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-26T00:00:13.790440" elapsed="0.000036"/>
</return>
<msg time="2026-04-26T00:00:13.790608" level="INFO">${response_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-26T00:00:13.751376" elapsed="0.039509"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-26T00:00:13.790954" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:13.791113" level="INFO">${data_text} = {
 "request": {
  "mbean": "org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore",
  "type": "read"
 },
 "status": 200,
 "timestamp": 1777161613,
...</msg>
<var>${data_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="PASS" start="2026-04-26T00:00:13.750712" elapsed="0.040428"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.792188" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:13.791731" elapsed="0.000486"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-26T00:00:13.792267" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:13.792445" level="INFO">${data_object} = {'request': {'mbean': 'org.opendaylight.controller:Category=Shards,name=member-3-shard-car-config,type=DistributedConfigDatastore', 'type': 'read'}, 'status': 200, 'timestamp': 1777161613, 'value': {'...</msg>
<var>${data_object}</var>
<arg>${data_text}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-26T00:00:13.791368" elapsed="0.001104"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.792900" level="INFO">${value} = {'AbortTransactionsCount': 0, 'CommitIndex': 7580, 'CommittedTransactionsCount': 898, 'CurrentTerm': 7, 'FailedReadTransactionsCount': 0, 'FailedTransactionsCount': 0, 'FollowerInfo': [{'active': Fals...</msg>
<var>${value}</var>
<arg>${data_object}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.792672" elapsed="0.000256"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.793285" level="INFO">${raft_property} = Leader</msg>
<var>${raft_property}</var>
<arg>${value}</arg>
<arg>${property}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.793078" elapsed="0.000233"/>
</kw>
<return>
<value>${raft_property}</value>
<status status="PASS" start="2026-04-26T00:00:13.793359" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:13.793512" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>RaftState</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${member_index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.569828" elapsed="0.223709"/>
</kw>
<return>
<value>${raft_state}</value>
<status status="PASS" start="2026-04-26T00:00:13.793595" elapsed="0.000026"/>
</return>
<msg time="2026-04-26T00:00:13.793762" level="INFO">${raft_state} = Leader</msg>
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="PASS" start="2026-04-26T00:00:13.569079" elapsed="0.224708"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.794079" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.793867" elapsed="0.000269"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.794362" elapsed="0.000196"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:13.794160" elapsed="0.000435"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.794929" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.794619" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.793849" elapsed="0.001161"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:13.568910" elapsed="0.226125"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.362245" elapsed="0.432822"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.795111" elapsed="0.000027"/>
</return>
<msg time="2026-04-26T00:00:13.795315" level="INFO">${leader_list} = [3]</msg>
<msg time="2026-04-26T00:00:13.795363" level="INFO">${follower_list} = [2]</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-26T00:00:13.357809" elapsed="0.437576"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.795849" level="INFO">Length is 1.</msg>
<msg time="2026-04-26T00:00:13.795927" level="INFO">${leader_count} = 1</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:13.795553" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.796232" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.796023" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.796004" elapsed="0.000306"/>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.798352" level="INFO">Length is 1.</msg>
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="PASS" start="2026-04-26T00:00:13.796477" elapsed="0.001925"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-26T00:00:13.798844" level="INFO">${leader} = 3</msg>
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.798584" elapsed="0.000293"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.798927" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:13.799128" level="INFO">${leader} = 3</msg>
<msg time="2026-04-26T00:00:13.799176" level="INFO">${follower_list} = [2]</msg>
<var>${leader}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="PASS" start="2026-04-26T00:00:13.355270" elapsed="0.443930"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.799770" level="INFO">${new_leader_index} = 3</msg>
<arg>\${new_leader_index}</arg>
<arg>${leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:13.799370" elapsed="0.000451"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.800330" level="INFO">${new_followers_list} = [2]</msg>
<arg>\${new_followers_list}</arg>
<arg>${follower_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:13.799987" elapsed="0.000385"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.801290" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.800985" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:13.801362" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:13.801515" level="INFO">${leader_session} = ClusterManagement__session_3</msg>
<var>${leader_session}</var>
<arg>member_index=${leader}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.800615" elapsed="0.000931"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.802109" level="INFO">${new_leader_session} = ClusterManagement__session_3</msg>
<arg>\${new_leader_session}</arg>
<arg>${leader_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:13.801727" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.802565" level="INFO">${sessions} = []</msg>
<var>${sessions}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:13.802314" elapsed="0.000277"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.804061" level="INFO">${session} = ClusterManagement__session_2</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:13.803523" elapsed="0.000571"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:13.804152" elapsed="0.000031"/>
</return>
<msg time="2026-04-26T00:00:13.804341" level="INFO">${follower_session} = ClusterManagement__session_2</msg>
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.803030" elapsed="0.001337"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.804513" elapsed="0.000213"/>
</kw>
<var name="${follower_index}">2</var>
<status status="PASS" start="2026-04-26T00:00:13.802842" elapsed="0.001924"/>
</iter>
<var>${follower_index}</var>
<value>@{follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.802646" elapsed="0.002150"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.805331" level="INFO">${new_follower_sessions} = ['ClusterManagement__session_2']</msg>
<arg>\${new_follower_sessions}</arg>
<arg>${sessions}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:13.804946" elapsed="0.000430"/>
</kw>
<kw name="Get From List" owner="Collections">
<msg time="2026-04-26T00:00:13.805732" level="INFO">${first_follower_session} = ClusterManagement__session_2</msg>
<var>${first_follower_session}</var>
<arg>${sessions}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.805525" elapsed="0.000234"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.806319" level="INFO">${new_first_follower_session} = ClusterManagement__session_2</msg>
<arg>\${new_first_follower_session}</arg>
<arg>${first_follower_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:00:13.805930" elapsed="0.000433"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.806410" elapsed="0.000030"/>
</return>
<arg>${old_car_followers}</arg>
<arg>shard_name=${SHARD_NAME}</arg>
<arg>shard_type=${SHARD_TYPE}</arg>
<doc>Get current leader and followers for given shard. Can be used for less nodes than full odl configuration.
Variable names do not contain neither node nor shard names, so the variables are only suitable for temporary use, as indicated by Tmp in the keyword name.
This keyword sets the following suite variables:
${new_leader_session} - http session for the leader node
${new_follower_sessions} - list of http sessions for the follower nodes
${new_first_follower_session} - http session for the first follower node
${new_leader_index} - index of the shard leader
${new_followers_list} - list of followers indexes</doc>
<status status="PASS" start="2026-04-26T00:00:13.354464" elapsed="0.452103"/>
</kw>
<doc>Verify new owner of the car shard is elected.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-26T00:00:02.216779" elapsed="11.589943"/>
</test>
<test id="s1-s3-t4" name="Verify_Cars_Configured" line="77">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-26T00:00:13.810132" elapsed="0.000240"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-26T00:00:13.809867" elapsed="0.000565"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.811701" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.811481" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.811458" elapsed="0.000323"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.816667" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.816556" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.816538" elapsed="0.000220"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.817850" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:13.817424" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.818345" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:13.818032" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:13.818420" elapsed="0.000035"/>
</return>
<msg time="2026-04-26T00:00:13.818583" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:13.817048" elapsed="0.001561"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.825934" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.825643" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.825598" elapsed="0.000498"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.828492" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.828330" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.828303" elapsed="0.000294"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.829288" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.828833" elapsed="0.000495"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:13.829917" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:13.829557" elapsed="0.000453"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:13.867329" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:13.830774" elapsed="0.036663"/>
</kw>
<msg time="2026-04-26T00:00:13.867622" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:13.867692" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.830251" elapsed="0.037482"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:13.902705" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:13.868256" elapsed="0.034567"/>
</kw>
<msg time="2026-04-26T00:00:13.902987" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:13.903033" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.867906" elapsed="0.035165"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.903413" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.903158" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.903133" elapsed="0.000363"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:13.903975" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:13.903635" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.904336" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.904120" elapsed="0.000272"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.904102" elapsed="0.000315"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:13.904452" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:13.907057" elapsed="0.000156"/>
</kw>
<msg time="2026-04-26T00:00:13.907308" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:13.906022" elapsed="0.001423"/>
</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="NOT RUN" start="2026-04-26T00:00:13.907731" elapsed="0.000077"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.908058" elapsed="0.000074"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:13.905377" elapsed="0.002866"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:13.904761" elapsed="0.003547"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:13.827865" elapsed="0.080542"/>
</kw>
<msg time="2026-04-26T00:00:13.908501" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:13.908553" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.826428" elapsed="0.082176"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:13.908826" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:00:13.908714" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.908672" elapsed="0.000237"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.909309" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.909646" elapsed="0.000048"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.909746" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:13.824756" elapsed="0.085102"/>
</kw>
<msg time="2026-04-26T00:00:13.910070" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:13.910118" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.819035" elapsed="0.091123"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:13.910478" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:13.910236" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.910219" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:13.818870" elapsed="0.091709"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.916241" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.916131" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.916111" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:13.917472" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:13.917362" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:13.917344" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:13.918037" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:13.917728" elapsed="0.000336"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:13.918427" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:13.918215" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:13.970087" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:13.918961" elapsed="0.051371"/>
</kw>
<msg time="2026-04-26T00:00:13.970558" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:13.970608" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.918605" elapsed="0.052040"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:14.022179" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:13.971578" elapsed="0.050776"/>
</kw>
<msg time="2026-04-26T00:00:14.022553" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:14.022601" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.971111" elapsed="0.051527"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.023062" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.022770" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.022738" elapsed="0.000410"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:14.023643" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:14.023286" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.024039" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.023827" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.023809" elapsed="0.000309"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:14.024156" elapsed="0.000039"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:14.026729" elapsed="0.000157"/>
</kw>
<msg time="2026-04-26T00:00:14.026949" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:14.025706" elapsed="0.001380"/>
</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="NOT RUN" start="2026-04-26T00:00:14.027363" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.027738" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:14.025047" elapsed="0.002886"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:14.024462" elapsed="0.003539"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:13.917057" elapsed="0.111046"/>
</kw>
<msg time="2026-04-26T00:00:14.028203" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:14.028252" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.916454" elapsed="0.111840"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:14.028507" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:00:14.028385" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.028361" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.029023" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.029364" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:14.029438" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:13.915778" elapsed="0.113774"/>
</kw>
<msg time="2026-04-26T00:00:14.029651" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:14.029727" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.910879" elapsed="0.118904"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.030112" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.029865" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.029847" elapsed="0.000394"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:13.910746" elapsed="0.119523"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:14.036033" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:14.035921" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.035900" elapsed="0.000204"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:14.037254" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:14.037146" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.037128" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:14.037788" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:14.037463" elapsed="0.000353"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:14.038181" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:14.037966" elapsed="0.000241"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:14.074666" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:14.038706" elapsed="0.036105"/>
</kw>
<msg time="2026-04-26T00:00:14.074995" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:14.075042" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:14.038360" elapsed="0.036719"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:14.130029" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:14.075694" elapsed="0.054611"/>
</kw>
<msg time="2026-04-26T00:00:14.130579" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:14.130628" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:14.075270" elapsed="0.055397"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.131256" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.130887" elapsed="0.000435"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.130804" elapsed="0.000550"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:14.131949" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "V "e "r "i "f "y "_ "C "a "r "s "_ "C "o "n "f "i "g "u "r "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:14.131497" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.132365" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.132145" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.132120" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:14.132486" elapsed="0.000046"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:14.135187" elapsed="0.000157"/>
</kw>
<msg time="2026-04-26T00:00:14.135407" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:14.134123" elapsed="0.001425"/>
</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="NOT RUN" start="2026-04-26T00:00:14.135838" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.136176" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:14.133435" elapsed="0.002933"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:14.132839" elapsed="0.003593"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:14.036840" elapsed="0.099696"/>
</kw>
<msg time="2026-04-26T00:00:14.136637" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:14.136700" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:14.036251" elapsed="0.100555"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:14.137003" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:00:14.136891" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.136871" elapsed="0.000216"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.137500" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.137871" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:14.137945" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:14.035503" elapsed="0.102554"/>
</kw>
<msg time="2026-04-26T00:00:14.138159" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:14.138205" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:14.030542" elapsed="0.107701"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:14.138564" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:14.138322" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:14.138304" elapsed="0.000338"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:14.030405" elapsed="0.108261"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:13.818666" elapsed="0.320056"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:00:13.816179" elapsed="0.322608"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-26T00:00:13.811157" elapsed="0.327693"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:13.810645" elapsed="0.328254"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-26T00:00:13.807668" elapsed="0.331290"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:00:24.140055" level="FAIL">No match found for '~]&gt;' in 10 seconds
Output:
[?2004l2026-04-25 23:59:55,636 INFO: Add 10000 car(s) to 10.30.171.80:8181 (1 per request)
.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-26T00:00:14.139600" elapsed="10.001154">No match found for '~]&gt;' in 10 seconds
Output:
[?2004l2026-04-25 23:59:55,636 INFO: Add 10000 car(s) to 10.30.171.80:8181 (1 per request)
.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.162496" level="INFO">2026-04-26 00:00:25,481 INFO: Response code(s) got per number of requests: {201: 1002}
2026-04-26 00:00:25,482 INFO: Response code(s) got per number of requests: {201: 1001}
2026-04-26 00:00:25,483 INFO: Response code(s) got per number of requests: {201: 990}
2026-04-26 00:00:25,484 INFO: Response code(s) got per number of requests: {201: 1001}
2026-04-26 00:00:25,486 INFO: Response code(s) got per number of requests: {201: 1005}
2026-04-26 00:00:25,493 INFO: Response code(s) got per number of requests: {201: 996}
2026-04-26 00:00:25,494 INFO: Response code(s) got per number of requests: {201: 1000}
2026-04-26 00:00:25,494 INFO: Response code(s) got per number of requests: {201: 995}
2026-04-26 00:00:25,495 INFO: Response code(s) got per number of requests: {201: 1004}
Traceback (most recent call last):
  File "/home/jenkins/cluster_rest_script.py", line 864, in &lt;module&gt;
    handler_function(args.host, args.port, args.threads, args.itemcount, auth, args.ipr)
  File "/home/jenkins/cluster_rest_script.py", line 645, in add_car_with_retries
    res = _task_executor(
  File "/home/jenkins/cluster_rest_script.py", line 357, in _task_executor
    for k, v in part_result.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
2026-04-26 00:00:25,498 INFO: Response code(s) got per number of requests: {201: 1006}
[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-26T00:00:26.141505" elapsed="0.021110"/>
</kw>
<arg>120x</arg>
<arg>2s</arg>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-26T00:00:14.139149" elapsed="12.023552"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.164330" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:26.163942" elapsed="0.000417"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:26.164414" elapsed="0.000046"/>
</return>
<msg time="2026-04-26T00:00:26.164597" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${new_leader_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:26.163019" elapsed="0.001604"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Cars_Count">
<kw name="Get_Cars_Count">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:26.337639" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:26.343458" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/car:cars?content=config 
 status=200, reason=OK 
 headers={'Cache-Control': 'no-cache', 'Content-Type': 'application/yang-data+json', 'Transfer-Encoding': 'chunked'} 
 body={"car:cars":{"car-entry":[{"id":"4248","model":"model4248","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4134","model":"model4134","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9409","model":"model9409","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1673","model":"model1673","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9691","model":"model9691","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9794","model":"model9794","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7651","model":"model7651","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"344","model":"model344","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3530","model":"model3530","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"447","model":"model447","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1163","model":"model1163","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4440","model":"model4440","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4239","model":"model4239","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4147","model":"model4147","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9418","model":"model9418","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1660","model":"model1660","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7664","model":"model7664","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"357","model":"model357","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3521","model":"model3521","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1150","model":"model1150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4222","model":"model4222","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5208","model":"model5208","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2808","model":"model2808","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1699","model":"model1699","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7468","model":"model7468","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3556","model":"model3556","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3659","model":"model3659","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1181","model":"model1181","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4213","model":"model4213","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5217","model":"model5217","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1547","model":"model1547","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1686","model":"model1686","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7682","model":"model7682","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2130","model":"model2130","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"331","model":"model331","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3547","model":"model3547","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4300","model":"model4300","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5331","model":"model5331","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7591","model":"model7591","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7302","model":"model7302","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2041","model":"model2041","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2236","model":"model2236","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3827","model":"model3827","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"482","model":"model482","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3632","model":"model3632","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4580","model":"model4580","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5340","model":"model5340","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7315","model":"model7315","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2054","model":"model2054","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2249","model":"model2249","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"495","model":"model495","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3623","model":"model3623","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4326","model":"model4326","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4058","model":"model4058","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1595","model":"model1595","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8186","model":"model8186","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7573","model":"model7573","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9427","model":"model9427","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2254","model":"model2254","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3801","model":"model3801","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"369","model":"model369","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3519","model":"model3519","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4317","model":"model4317","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1582","model":"model1582","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8199","model":"model8199","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"7586","model":"model7586","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"9436","model":"model9436","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2072","model":"model2072","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3711","model":"model3711","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2267","model":"model2267","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"3814","model":"model3814","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5674","model":"model5674","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5175","model":"model5175","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1773","model":"model1773","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1876","model":"model1876","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6016","model":"model6016","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8368","model":"model8368","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"150","model":"model150","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4869","model":"model4869","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5665","model":"model5665","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5188","model":"model5188","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2896","model":"model2896","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1764","model":"model1764","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2999","model":"model2999","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"1867","model":"model1867","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6029","model":"model6029","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8377","model":"model8377","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6230","model":"model6230","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"4999","model":"model4999","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"5344","model":"model5344","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"2883","model":"model2883","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8342","model":"model8342","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"8481","model":"model8481","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6823","model":"model6823","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6926","model":"model6926","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"525","model":"model525","year":2015,"category":"my_category","manufacturer":"my_manufacturer"},{"id":"6... (set the log level to DEBUG or TRACE to see the full content) 
 </msg>
<msg time="2026-04-26T00:00:26.343837" level="INFO">${resp} = &lt;Response [200]&gt;</msg>
<var>${resp}</var>
<arg>${session}</arg>
<arg>url=${CARURL_CONFIG}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:00:26.165998" elapsed="0.177884"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.663138" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>len(${resp.json()}[car:cars][car-entry])</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:00:26.344198" elapsed="0.318992"/>
</kw>
<return>
<value>${count}</value>
<status status="PASS" start="2026-04-26T00:00:26.663273" elapsed="0.000053"/>
</return>
<msg time="2026-04-26T00:00:26.663483" level="INFO">${count} = 10000</msg>
<var>${count}</var>
<arg>${session}</arg>
<doc>Count car items in config ds.</doc>
<status status="PASS" start="2026-04-26T00:00:26.165665" elapsed="0.497845"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${count}</arg>
<arg>${exp_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-26T00:00:26.663738" elapsed="0.000412"/>
</kw>
<arg>${ITEM_COUNT}</arg>
<arg>${session}</arg>
<doc>Count car items in config ds and compare with expected number.</doc>
<status status="PASS" start="2026-04-26T00:00:26.165303" elapsed="0.498912"/>
</kw>
<arg>5x</arg>
<arg>2s</arg>
<arg>Verify_Cars_Count</arg>
<arg>${ITEM_COUNT}</arg>
<arg>${session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-26T00:00:26.164809" elapsed="0.499460"/>
</kw>
<doc>Verify that all cars are configured.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-26T00:00:13.807018" elapsed="12.857377"/>
</test>
<test id="s1-s3-t5" name="Rejoin_Isolated_Member" line="83">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-26T00:00:26.667556" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-26T00:00:26.667297" 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-26T00:00:26.668890" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.668758" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.668736" elapsed="0.000224"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.673661" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.673556" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.673538" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.674758" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:26.674354" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.675241" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:26.674936" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:26.675312" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:26.675466" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:26.673964" elapsed="0.001526"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.680881" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.680773" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.680755" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.682127" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.681993" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.681975" elapsed="0.000222"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.682632" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.682334" elapsed="0.000325"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.683046" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.682828" elapsed="0.000244"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.730088" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:26.683544" elapsed="0.046664"/>
</kw>
<msg time="2026-04-26T00:00:26.730415" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:26.730463" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.683222" elapsed="0.047277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.766438" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:26.731017" elapsed="0.035581"/>
</kw>
<msg time="2026-04-26T00:00:26.766777" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:26.766824" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.730661" elapsed="0.036200"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.767152" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.766939" elapsed="0.000268"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.766919" elapsed="0.000311"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.767657" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:26.767362" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.768036" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.767828" elapsed="0.000261"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.767810" elapsed="0.000302"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:26.768144" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.770565" elapsed="0.000157"/>
</kw>
<msg time="2026-04-26T00:00:26.770921" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:26.769552" elapsed="0.001502"/>
</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="NOT RUN" start="2026-04-26T00:00:26.771321" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.771645" elapsed="0.000103"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:26.768945" elapsed="0.002912"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:26.768405" elapsed="0.003517"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:26.681691" elapsed="0.090329"/>
</kw>
<msg time="2026-04-26T00:00:26.772113" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.772158" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.681089" elapsed="0.091106"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:26.772380" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:00:26.772271" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.772253" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.772877" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.773205" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.773277" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:26.680417" elapsed="0.092968"/>
</kw>
<msg time="2026-04-26T00:00:26.773481" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.773526" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.675877" elapsed="0.097686"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.773901" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.773637" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.773620" elapsed="0.000359"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:26.675743" elapsed="0.098259"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.779454" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.779346" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.779326" elapsed="0.000232"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.780733" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.780589" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.780571" elapsed="0.000233"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.781236" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.780941" elapsed="0.000322"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.781623" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.781412" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.817913" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:26.782142" elapsed="0.035870"/>
</kw>
<msg time="2026-04-26T00:00:26.818189" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:26.818236" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.781816" elapsed="0.036455"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.852688" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:26.818978" elapsed="0.033818"/>
</kw>
<msg time="2026-04-26T00:00:26.852954" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:26.852999" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.818451" elapsed="0.034585"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.853326" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.853112" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.853092" elapsed="0.000313"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.853861" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:26.853538" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.854216" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.854008" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.853990" elapsed="0.000303"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:26.854326" elapsed="0.000028"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.856778" elapsed="0.000146"/>
</kw>
<msg time="2026-04-26T00:00:26.856984" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:26.855759" elapsed="0.001350"/>
</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="NOT RUN" start="2026-04-26T00:00:26.857373" elapsed="0.000073"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.857719" elapsed="0.000075"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:26.855146" elapsed="0.002756"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:26.854608" elapsed="0.003356"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:26.780285" elapsed="0.077777"/>
</kw>
<msg time="2026-04-26T00:00:26.858153" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.858197" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.779730" elapsed="0.078509"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:26.858447" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:00:26.858316" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.858297" elapsed="0.000273"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.858976" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.859303" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.859374" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:26.778996" elapsed="0.080484"/>
</kw>
<msg time="2026-04-26T00:00:26.859574" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.859618" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.774288" elapsed="0.085367"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.859988" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.859746" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.859729" elapsed="0.000336"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:26.774125" elapsed="0.085963"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.865624" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.865517" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.865497" elapsed="0.000332"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.867072" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:26.866959" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.866940" elapsed="0.000202"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.867579" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.867278" elapsed="0.000328"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.867984" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.867771" elapsed="0.000238"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.903120" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:00:26.868487" elapsed="0.034731"/>
</kw>
<msg time="2026-04-26T00:00:26.903395" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:00:26.903442" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.868158" elapsed="0.035320"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.940158" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:00:26.904007" elapsed="0.036267"/>
</kw>
<msg time="2026-04-26T00:00:26.940436" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:00:26.940482" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.903637" elapsed="0.036880"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.940845" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.940598" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.940575" elapsed="0.000350"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.941356" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "R "e "j "o "i "n "_ "I "s "o "l "a "t "e "d "_ "M "e "m "b "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:26.941058" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.941721" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.941496" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.941478" elapsed="0.000373"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:00:26.941885" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:26.944461" elapsed="0.000146"/>
</kw>
<msg time="2026-04-26T00:00:26.944684" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:26.943338" elapsed="0.001497"/>
</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="NOT RUN" start="2026-04-26T00:00:26.945104" elapsed="0.000076"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.945558" elapsed="0.000080"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:26.942725" elapsed="0.003051"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:00:26.942146" elapsed="0.003695"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:00:26.866604" elapsed="0.079335"/>
</kw>
<msg time="2026-04-26T00:00:26.946031" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.946075" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.865978" elapsed="0.080134"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:00:26.946295" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:00:26.946188" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.946169" elapsed="0.000207"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.946819" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.947168" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:00:26.947263" elapsed="0.000022"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:00:26.865171" elapsed="0.082243"/>
</kw>
<msg time="2026-04-26T00:00:26.947547" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:00:26.947611" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.860341" elapsed="0.087322"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.948131" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.947793" elapsed="0.000415"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.947768" elapsed="0.000472"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:26.860208" elapsed="0.088066"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:26.675547" elapsed="0.272773"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:00:26.673193" elapsed="0.275207"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-26T00:00:26.668437" elapsed="0.280044"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:00:26.667991" elapsed="0.280553"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-26T00:00:26.665144" elapsed="0.283476"/>
</kw>
<kw name="Rejoin_Member_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.956059" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:26.955655" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.956562" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:26.956242" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:26.956634" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:26.956810" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:26.955271" elapsed="0.001598"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.957238" level="INFO">${source} = 10.30.171.37</msg>
<var>${source}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${rejoin_member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.957020" elapsed="0.000244"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.961306" level="INFO">${dport} = </msg>
<var>${dport}</var>
<arg>'${port}' != '${EMPTY}'</arg>
<arg>--dport ${port}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:26.957421" elapsed="0.003912"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.961951" level="INFO">${destination} = 10.30.171.37</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.961728" elapsed="0.000250"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.962501" level="INFO">${command} = sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.37 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -D OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:26.962127" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${rejoin_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${rejoin_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:26.962926" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.962597" elapsed="0.000391"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.962580" elapsed="0.000432"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:00:26.961576" elapsed="0.001459"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.963500" level="INFO">${destination} = 10.30.171.80</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.963287" elapsed="0.000239"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.964059" level="INFO">${command} = sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -D OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:26.963687" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${rejoin_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:26.965177" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:26.964912" elapsed="0.000291"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.965947" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:26.966046" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:26.965827" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:26.968602" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:26.968344" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.968326" elapsed="0.000371"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.968946" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:26.969062" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:26.968839" elapsed="0.000250"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.969614" level="INFO">Attempting to execute command "sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP" on remote system "10.30.171.37" 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-26T00:00:26.969236" elapsed="0.000424"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.970371" 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-26T00:00:26.969847" elapsed="0.000550"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:26.971540" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:26.971620" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:26.971034" elapsed="0.000610"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:26.971893" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:26.973806" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:27.269587" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Apr 26 00:00:02 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:26.973242" elapsed="0.296496"/>
</kw>
<msg time="2026-04-26T00:00:27.269895" 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="PASS" start="2026-04-26T00:00:26.972653" elapsed="0.297320"/>
</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="PASS" start="2026-04-26T00:00:26.970605" elapsed="0.299476"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.270535" level="INFO">Executing command 'sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.171.80 -j DROP'.</msg>
<msg time="2026-04-26T00:00:27.313420" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:27.313719" level="INFO">${stdout} = </msg>
<msg time="2026-04-26T00:00:27.313824" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:27.270297" elapsed="0.043578"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:27.314249" elapsed="0.000507"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.315920" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:27.315143" elapsed="0.000873"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:27.316480" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:27.316190" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.316138" elapsed="0.000499"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:27.317035" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-04-26T00:00:27.316795" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.316759" elapsed="0.000469"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:27.317307" elapsed="0.000034"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:27.323459" elapsed="0.000439"/>
</kw>
<msg time="2026-04-26T00:00:27.324102" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:27.322178" elapsed="0.002021"/>
</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="NOT RUN" start="2026-04-26T00:00:27.324412" elapsed="0.000030"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:27.324732" elapsed="0.000042"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:27.318015" elapsed="0.006864"/>
</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="PASS" start="2026-04-26T00:00:26.967814" elapsed="0.357195"/>
</kw>
<msg time="2026-04-26T00:00:27.325083" 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="PASS" start="2026-04-26T00:00:26.967258" elapsed="0.357894"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:26.966733" elapsed="0.358530"/>
</kw>
<msg time="2026-04-26T00:00:27.325321" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:26.966221" elapsed="0.359161"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:27.329773" elapsed="0.000148"/>
</kw>
<msg time="2026-04-26T00:00:27.329965" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:27.329159" elapsed="0.000918"/>
</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="NOT RUN" start="2026-04-26T00:00:27.330231" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:27.330393" elapsed="0.000020"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:27.325908" elapsed="0.004567"/>
</kw>
<msg time="2026-04-26T00:00:27.330567" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:26.965411" elapsed="0.365181"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.331154" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:27.330776" elapsed="0.000422"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:27.331242" elapsed="0.000030"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${rejoin_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:26.964453" elapsed="0.366935"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:26.964169" elapsed="0.367257"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:26.964151" elapsed="0.367300"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:00:26.963159" elapsed="0.368316"/>
</iter>
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:27.332038" level="INFO">${destination} = 10.30.170.188</msg>
<var>${destination}</var>
<arg>${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:27.331814" elapsed="0.000251"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.332588" level="INFO">${command} = sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -D OUTPUT -p ${protocol} ${dport} --source ${source} --destination ${destination} -j DROP</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:27.332212" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="&quot;${index}&quot; != &quot;${rejoin_member_index}&quot;">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:27.333666" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:27.333400" elapsed="0.000308"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.334437" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:27.334537" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:27.334318" elapsed="0.000246"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:27.337136" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:27.336876" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.336857" elapsed="0.000360"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.337468" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:27.337569" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:27.337359" elapsed="0.000236"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.338135" level="INFO">Attempting to execute command "sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP" on remote system "10.30.171.37" 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-26T00:00:27.337752" elapsed="0.000432"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.338719" level="INFO">${conn_id} = 30</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-26T00:00:27.338330" elapsed="0.000416"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.339921" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:27.340000" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:27.339351" elapsed="0.000673"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:27.340173" elapsed="0.000821"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.342399" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:27.646008" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Apr 26 00:00:27 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:27.341797" elapsed="0.304346"/>
</kw>
<msg time="2026-04-26T00:00:27.646291" 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="PASS" start="2026-04-26T00:00:27.341159" elapsed="0.305215"/>
</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="PASS" start="2026-04-26T00:00:27.338954" elapsed="0.307529"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.646980" level="INFO">Executing command 'sudo /sbin/iptables -D OUTPUT -p all  --source 10.30.171.37 --destination 10.30.170.188 -j DROP'.</msg>
<msg time="2026-04-26T00:00:27.689492" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:27.689763" level="INFO">${stdout} = </msg>
<msg time="2026-04-26T00:00:27.689864" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:27.646730" elapsed="0.043186"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:27.690260" elapsed="0.000549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.691849" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:27.691203" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:27.692433" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:27.692142" elapsed="0.000398"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.692087" elapsed="0.000504"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:27.692982" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-04-26T00:00:27.692744" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.692707" elapsed="0.000462"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:27.693243" elapsed="0.000032"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:27.699413" elapsed="0.000423"/>
</kw>
<msg time="2026-04-26T00:00:27.700055" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:27.698196" elapsed="0.001968"/>
</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="NOT RUN" start="2026-04-26T00:00:27.700381" elapsed="0.000031"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:27.700634" elapsed="0.000029"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:27.693969" elapsed="0.006808"/>
</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="PASS" start="2026-04-26T00:00:27.336327" elapsed="0.364579"/>
</kw>
<msg time="2026-04-26T00:00:27.700979" 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="PASS" start="2026-04-26T00:00:27.335786" elapsed="0.365260"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:27.335216" elapsed="0.365940"/>
</kw>
<msg time="2026-04-26T00:00:27.701214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:27.334726" elapsed="0.366549"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:27.705448" elapsed="0.000142"/>
</kw>
<msg time="2026-04-26T00:00:27.705633" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:27.704965" elapsed="0.000744"/>
</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="NOT RUN" start="2026-04-26T00:00:27.705858" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:27.706009" elapsed="0.000019"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:27.701695" elapsed="0.004442"/>
</kw>
<msg time="2026-04-26T00:00:27.706228" level="INFO">${output} = </msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:27.333915" elapsed="0.372338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.706714" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:27.706429" elapsed="0.000329"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:27.706801" elapsed="0.000029"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${rejoin_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:27.332993" elapsed="0.373933"/>
</kw>
<status status="PASS" start="2026-04-26T00:00:27.332698" elapsed="0.374265"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.332665" elapsed="0.374324"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:00:27.331624" elapsed="0.375391"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:00:26.961392" elapsed="0.745659"/>
</for>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.707466" level="INFO">${command} = sudo /sbin/iptables -L -n</msg>
<var>${command}</var>
<arg>sudo /sbin/iptables -L -n</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:27.707201" elapsed="0.000291"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:00:27.708408" level="INFO">${member_ip} = 10.30.171.37</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:00:27.708133" elapsed="0.000301"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.709172" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:27.709272" level="INFO">${current_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-26T00:00:27.709052" elapsed="0.000247"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" 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-26T00:00:27.711842" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:27.711565" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:27.711547" elapsed="0.000375"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.712198" level="INFO">index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-26T00:00:27.712298" level="INFO">${current_ssh_connection} = index=25
host=10.30.171.32
alias=None
port=22
timeout=10 seconds
newline=

prompt=~]&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
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-26T00:00:27.712088" elapsed="0.000237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.712861" level="INFO">Attempting to execute command "sudo /sbin/iptables -L -n" on remote system "10.30.171.37" 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-26T00:00:27.712467" elapsed="0.000440"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.713431" 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-26T00:00:27.713054" elapsed="0.000402"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:00:27.714343" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:00:27.714419" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:00:27.714066" 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-26T00:00:27.714591" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:00:27.716012" level="INFO">Logging into '10.30.171.37:22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:00:28.022419" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat Apr 25 23:59:45 UTC 2026

  System load:  0.03               Processes:             118
  Usage of /:   11.1% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.171.37
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

10 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Apr 26 00:00:27 2026 from 10.30.171.151
[?2004h[jenkins@releng-24250-7-0-builder-0 ~]&gt;</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="PASS" start="2026-04-26T00:00:27.715429" elapsed="0.307111"/>
</kw>
<msg time="2026-04-26T00:00:28.022705" 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="PASS" start="2026-04-26T00:00:27.715083" elapsed="0.307703"/>
</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="PASS" start="2026-04-26T00:00:27.713663" elapsed="0.309230"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:00:28.023358" level="INFO">Executing command 'sudo /sbin/iptables -L -n'.</msg>
<msg time="2026-04-26T00:00:28.045741" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:00:28.045989" level="INFO">${stdout} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<msg time="2026-04-26T00:00:28.046092" level="INFO">${stderr} = </msg>
<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="PASS" start="2026-04-26T00:00:28.023113" elapsed="0.023032"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-26T00:00:28.046492" elapsed="0.000500"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.048030" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:28.047376" elapsed="0.000747"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.048573" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:28.048289" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:28.048242" elapsed="0.000547"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:00:28.049146" elapsed="0.000057"/>
</return>
<status status="PASS" start="2026-04-26T00:00:28.048912" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-04-26T00:00:28.048877" elapsed="0.000450"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.049399" elapsed="0.000032"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:28.054763" elapsed="0.000195"/>
</kw>
<msg time="2026-04-26T00:00:28.055002" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:28.054188" elapsed="0.000878"/>
</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="NOT RUN" start="2026-04-26T00:00:28.055217" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.055370" elapsed="0.000020"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:28.050103" elapsed="0.005347"/>
</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="PASS" start="2026-04-26T00:00:27.711039" elapsed="0.344503"/>
</kw>
<msg time="2026-04-26T00:00:28.055603" 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="PASS" start="2026-04-26T00:00:27.710465" elapsed="0.345186"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-04-26T00:00:27.709944" elapsed="0.345813"/>
</kw>
<msg time="2026-04-26T00:00:28.055806" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:00:27.709445" elapsed="0.346406"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:00:28.058951" elapsed="0.000138"/>
</kw>
<msg time="2026-04-26T00:00:28.059131" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:00:28.058492" elapsed="0.000700"/>
</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="NOT RUN" start="2026-04-26T00:00:28.059346" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.059499" elapsed="0.000020"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:00:28.056132" elapsed="0.003447"/>
</kw>
<msg time="2026-04-26T00:00:28.059731" level="INFO">${output} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-26T00:00:27.708640" elapsed="0.351123"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.060185" level="INFO">Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-BRIDGE (1 references)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-CT (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain DOCKER-FORWARD (1 references)
target     prot opt source               destination         
DOCKER-CT  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-INTERNAL  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-BRIDGE  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-INTERNAL (1 references)
target     prot opt source               destination         

Chain DOCKER-USER (1 references)
target     prot opt source               destination         </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:28.059934" elapsed="0.000345"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-26T00:00:28.060322" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:28.060477" level="INFO">${output} = Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  -...</msg>
<var>${output}</var>
<arg>command=${command}</arg>
<arg>member_index=${rejoin_member_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-04-26T00:00:27.707707" elapsed="0.352797"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.060953" level="INFO">Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-BRIDGE (1 references)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-CT (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

Chain DOCKER-FORWARD (1 references)
target     prot opt source               destination         
DOCKER-CT  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-INTERNAL  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-BRIDGE  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-INTERNAL (1 references)
target     prot opt source               destination         

Chain DOCKER-USER (1 references)
target     prot opt source               destination         </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:28.060656" elapsed="0.000352"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.064843" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:28.064423" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.065329" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:28.065022" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:28.065399" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:28.065554" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:28.064049" elapsed="0.001530"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.067090" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:28.066790" elapsed="0.000327"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:28.067162" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:28.067308" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:28.066437" elapsed="0.000895"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.074526" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:28.074272" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:28.074977" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:28.074730" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:28.091702" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:28.091831" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:00:28.092147" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:00:28.077096" elapsed="0.015908">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:28.075087" elapsed="0.018099">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.093581" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:28.093258" elapsed="0.000503"/>
</branch>
<status status="FAIL" start="2026-04-26T00:00:28.075068" elapsed="0.018748">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.094622" elapsed="0.000088"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.094951" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:28.094870" elapsed="0.000174"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:28.094831" elapsed="0.000261"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.095392" elapsed="0.000046"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.095544" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:00:28.069936" elapsed="0.025874">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.095969" elapsed="0.000034"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:00:28.067534" elapsed="0.028648">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.096647" elapsed="0.000085"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.096983" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:28.096905" elapsed="0.000167"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:28.096868" elapsed="0.000251"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.097566" elapsed="0.000053"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.098074" elapsed="0.000053"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:00:28.098223" elapsed="0.000032"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:00:28.066066" elapsed="0.032376">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:00:28.099145" elapsed="0.000047"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:00:28.099043" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:28.098577" elapsed="0.000728"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:28.099613" elapsed="0.000049"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:00:28.065841" elapsed="0.033968">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:00:28.065635" elapsed="0.034305">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:00:28.061763" elapsed="0.038383">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:38.108151" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:38.107126" elapsed="0.001094"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:38.109461" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:38.108741" elapsed="0.000781"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:38.109642" elapsed="0.000113"/>
</return>
<msg time="2026-04-26T00:00:38.110052" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:38.106206" elapsed="0.003904"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:38.113085" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:38.112766" elapsed="0.000347"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:38.113160" elapsed="0.000028"/>
</return>
<msg time="2026-04-26T00:00:38.113310" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:38.112088" elapsed="0.001248"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:38.120477" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:38.120216" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:38.120936" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:38.120686" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:38.132458" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:38.132584" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:00:38.132904" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:00:38.123191" elapsed="0.010583">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:38.121055" elapsed="0.012917">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.134408" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:38.134051" elapsed="0.000514"/>
</branch>
<status status="FAIL" start="2026-04-26T00:00:38.121035" elapsed="0.013586">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.135528" elapsed="0.000125"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:38.135950" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:38.135862" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:38.135819" elapsed="0.000281"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.136426" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:00:38.136568" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:00:38.115956" elapsed="0.020779">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:38.136899" elapsed="0.000024"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:00:38.113541" elapsed="0.023499">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.137342" elapsed="0.000034"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:00:38.137520" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:38.137470" elapsed="0.000106"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:38.137447" elapsed="0.000160"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.137895" elapsed="0.000035"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.138196" elapsed="0.000033"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:00:38.138291" elapsed="0.000020"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:00:38.111165" elapsed="0.027263">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:00:38.138596" elapsed="0.000023"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:00:38.138538" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:38.138515" elapsed="0.000191"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:38.138944" elapsed="0.000040"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:00:38.110640" elapsed="0.028423">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:00:38.110232" elapsed="0.028917">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:00:38.101220" elapsed="0.038063">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:48.147191" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:48.146187" elapsed="0.001073"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:48.148357" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:48.147616" elapsed="0.000801"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:48.148523" elapsed="0.000076"/>
</return>
<msg time="2026-04-26T00:00:48.148918" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:48.145237" elapsed="0.003738"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:48.151606" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:48.151299" elapsed="0.000334"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:48.151694" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:00:48.151847" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:48.150953" elapsed="0.000920"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:48.159193" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:48.158927" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:48.159629" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:48.159386" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:48.170219" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:48.170375" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:00:48.170537" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:00:48.161742" elapsed="0.009359">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:48.159761" elapsed="0.011456">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.171467" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:48.171264" elapsed="0.000295"/>
</branch>
<status status="FAIL" start="2026-04-26T00:00:48.159740" elapsed="0.011852">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.172126" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:48.172312" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:48.172261" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:48.172237" elapsed="0.000161"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.172584" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:00:48.172724" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:00:48.154716" elapsed="0.018157">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:48.172977" elapsed="0.000022"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:00:48.152079" elapsed="0.021032">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.173415" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:00:48.173602" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:48.173552" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:48.173529" elapsed="0.000184"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.174012" elapsed="0.000034"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.174311" elapsed="0.000032"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:00:48.174405" elapsed="0.000020"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:00:48.150083" elapsed="0.024458">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:00:48.174722" elapsed="0.000021"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:00:48.174648" elapsed="0.000129"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:48.174626" elapsed="0.000181"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:48.174994" elapsed="0.000029"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:00:48.149502" elapsed="0.025589">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:00:48.149098" elapsed="0.026119">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:00:48.140262" elapsed="0.035090">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:00:58.184191" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:00:58.183103" elapsed="0.001161"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:00:58.185442" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:00:58.184649" elapsed="0.000856"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:00:58.185620" elapsed="0.000164"/>
</return>
<msg time="2026-04-26T00:00:58.186111" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:00:58.182099" elapsed="0.004073"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:00:58.187714" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:00:58.187395" elapsed="0.000346"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:00:58.187788" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:00:58.187937" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:00:58.187056" elapsed="0.000906"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:58.195024" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:58.194761" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:00:58.195461" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:00:58.195218" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:00:58.206344" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:00:58.206466" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:00:58.206751" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:00:58.197584" elapsed="0.009950">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:00:58.195580" elapsed="0.012169">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.208155" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:00:58.207827" elapsed="0.000470"/>
</branch>
<status status="FAIL" start="2026-04-26T00:00:58.195559" elapsed="0.012789">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.209198" elapsed="0.000057"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:58.209495" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:58.209411" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:58.209375" elapsed="0.000432"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.210118" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:00:58.210275" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:00:58.190566" elapsed="0.019941">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:00:58.210663" elapsed="0.000063"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:00:58.188171" elapsed="0.022739">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.211379" elapsed="0.000053"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:00:58.214897" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:00:58.214796" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:58.211540" elapsed="0.003507"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.215493" elapsed="0.000054"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.216012" elapsed="0.000054"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:00:58.216165" elapsed="0.000039"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:00:58.186665" elapsed="0.029799">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:00:58.216795" elapsed="0.000033"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:00:58.216706" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:00:58.216635" elapsed="0.000297"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:00:58.217236" elapsed="0.000048"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:00:58.186438" elapsed="0.030959">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:00:58.186243" elapsed="0.031286">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:00:58.176380" elapsed="0.041427">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:01:08.226760" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:01:08.225641" elapsed="0.001194"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:01:08.228016" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:01:08.227221" elapsed="0.000859"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:01:08.228194" elapsed="0.000132"/>
</return>
<msg time="2026-04-26T00:01:08.228560" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:01:08.224397" elapsed="0.004199"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:08.231022" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:08.230493" elapsed="0.000581"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:01:08.231143" elapsed="0.000043"/>
</return>
<msg time="2026-04-26T00:01:08.231357" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:01:08.230015" elapsed="0.001378"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:08.240297" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:08.240025" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:08.240767" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:08.240500" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:08.252151" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:08.252339" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:01:08.252888" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:01:08.242881" elapsed="0.011343">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:01:08.240886" elapsed="0.013601">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.255163" elapsed="0.000080"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:08.254605" elapsed="0.000786"/>
</branch>
<status status="FAIL" start="2026-04-26T00:01:08.240865" elapsed="0.014627">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.256745" elapsed="0.000051"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:08.257013" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:08.256938" elapsed="0.000158"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:08.256902" elapsed="0.000236"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.257406" elapsed="0.000043"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:01:08.257543" elapsed="0.000029"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:01:08.235172" elapsed="0.022624">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:08.257941" elapsed="0.000033"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:01:08.231702" elapsed="0.026436">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.258600" elapsed="0.000048"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:01:08.258884" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:08.258812" elapsed="0.000153"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:08.258775" elapsed="0.000238"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.259399" elapsed="0.000047"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.259900" elapsed="0.000049"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:01:08.260225" elapsed="0.000085"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:01:08.229460" elapsed="0.031033">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:01:08.260767" elapsed="0.000032"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:01:08.260656" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:08.260621" elapsed="0.000275"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:08.261182" elapsed="0.000044"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:01:08.228961" elapsed="0.032372">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:01:08.228695" elapsed="0.032766">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:01:08.218909" elapsed="0.042751">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:01:18.268721" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:01:18.268040" elapsed="0.000728"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:01:18.269448" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:01:18.268999" elapsed="0.000492"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:01:18.269559" elapsed="0.000052"/>
</return>
<msg time="2026-04-26T00:01:18.269822" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:01:18.267445" elapsed="0.002414"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:18.272004" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:18.271550" elapsed="0.000493"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:01:18.272109" elapsed="0.000040"/>
</return>
<msg time="2026-04-26T00:01:18.272319" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:01:18.271072" elapsed="0.001284"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:18.281766" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:18.281318" elapsed="0.000495"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:18.282237" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:18.281964" elapsed="0.000318"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:18.292653" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:18.292731" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:01:18.292842" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:01:18.284330" elapsed="0.008895">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:01:18.282355" elapsed="0.010953">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.293553" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:18.293400" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-04-26T00:01:18.282335" elapsed="0.011308">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.294048" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:18.294187" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:18.294150" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:18.294132" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.294390" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:01:18.294461" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:01:18.276296" elapsed="0.018269">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:18.294637" elapsed="0.000015"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:01:18.272647" elapsed="0.022105">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.294970" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:01:18.295099" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:18.295063" elapsed="0.000075"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:18.295047" elapsed="0.000113"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.295347" elapsed="0.000024"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.295560" elapsed="0.000023"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:01:18.295627" elapsed="0.000015"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:01:18.270524" elapsed="0.025225">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:01:18.295867" elapsed="0.000014"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:01:18.295829" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:18.295813" elapsed="0.000116"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:18.296063" elapsed="0.000021"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:01:18.270213" elapsed="0.025921">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:01:18.269940" elapsed="0.026253">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:01:18.262815" elapsed="0.033478">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.304194" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:01:28.303282" elapsed="0.000957"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.304929" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:01:28.304464" elapsed="0.000503"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:01:28.305035" elapsed="0.000051"/>
</return>
<msg time="2026-04-26T00:01:28.305270" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:01:28.302251" elapsed="0.003054"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.308038" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:28.307565" elapsed="0.000512"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:01:28.308143" elapsed="0.000041"/>
</return>
<msg time="2026-04-26T00:01:28.308355" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.306754" elapsed="0.001637"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.317701" level="INFO">jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.317425" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.318141" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.317897" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:28.328069" level="INFO">GET Request : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 path_url=/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:28.328128" level="INFO">GET Response : url=http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore 
 status=401, reason=Unauthorized 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '524'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 401 Unauthorized&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 401 Unauthorized&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;401&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Unauthorized&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.jolokia.osgi.servlet.JolokiaServlet&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-04-26T00:01:28.328243" level="FAIL">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:01:28.320248" elapsed="0.008381">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<status status="FAIL" start="2026-04-26T00:01:28.318255" elapsed="0.010480">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.328918" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.328771" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-04-26T00:01:28.318235" elapsed="0.010774">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.329375" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.329510" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.329473" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:28.329456" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.329725" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.329798" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-04-26T00:01:28.312025" elapsed="0.017880">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.329990" elapsed="0.000017"/>
</return>
<var>${conf_text}</var>
<arg>uri=${JOLOKIA_CONF_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-04-26T00:01:28.308700" elapsed="0.021391">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${conf_status}</var>
<arg>shard_manager_text=${conf_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.330307" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'False' == ${conf_status}">
<return>
<value>False</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.330479" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.330441" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:28.330424" elapsed="0.000119"/>
</if>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<var>${oper_text}</var>
<arg>uri=${JOLOKIA_OPER_SHARD_MANAGER_URI}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.330750" elapsed="0.000025"/>
</kw>
<kw name="ClusterManagement__Parse_Sync_Status" owner="ClusterManagement">
<var>${oper_status}</var>
<arg>shard_manager_text=${oper_text}</arg>
<doc>Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.330967" elapsed="0.000024"/>
</kw>
<return>
<value>${oper_status}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.331035" elapsed="0.000017"/>
</return>
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="FAIL" start="2026-04-26T00:01:28.306217" elapsed="0.024923">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-26T00:01:28.331299" elapsed="0.000015"/>
</continue>
<status status="NOT RUN" start="2026-04-26T00:01:28.331260" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:01:28.331241" elapsed="0.000123"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.331501" elapsed="0.000022"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-26T00:01:28.305906" elapsed="0.025669">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="FAIL" start="2026-04-26T00:01:28.305613" elapsed="0.026023">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</for>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="FAIL" start="2026-04-26T00:01:28.297290" elapsed="0.034460">HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<msg time="2026-04-26T00:01:28.331840" level="FAIL">Keyword 'Check_Cluster_Is_In_Sync' failed after retrying for 1 minute. The last error was: HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</msg>
<arg>${timeout}</arg>
<arg>10s</arg>
<arg>Check_Cluster_Is_In_Sync</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-26T00:00:28.061162" elapsed="60.270773">Keyword 'Check_Cluster_Is_In_Sync' failed after retrying for 1 minute. The last error was: HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<arg>${old_car_leader}</arg>
<doc>If the list is empty, rejoin member from all ODL instances. Otherwise, rejoin member based on present indices.</doc>
<status status="FAIL" start="2026-04-26T00:00:26.949090" elapsed="61.382950">Keyword 'Check_Cluster_Is_In_Sync' failed after retrying for 1 minute. The last error was: HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</kw>
<doc>Rejoin isolated node</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:00:26.664643" elapsed="61.667625">Keyword 'Check_Cluster_Is_In_Sync' failed after retrying for 1 minute. The last error was: HTTPError: 401 Client Error: Unauthorized for url: http://10.30.171.37:8181/jolokia/read/org.opendaylight.controller:Category=ShardManager,name=shard-manager-config,type=DistributedConfigDatastore</status>
</test>
<test id="s1-s3-t6" name="Delete Cars" line="87">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-26T00:01:28.337084" elapsed="0.000306"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-26T00:01:28.336717" elapsed="0.000753"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.338878" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.338716" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.338687" elapsed="0.000289"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.344013" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.343905" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.343888" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.345068" level="INFO">${return_list_reference} = [1, 2, 3]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:01:28.344663" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.345550" level="INFO">${return_list_copy} = [1, 2, 3]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:01:28.345247" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:01:28.345620" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:01:28.345793" level="INFO">${index_list} = [1, 2, 3]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:01:28.344294" elapsed="0.001524"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.351112" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.351003" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.350984" elapsed="0.000196"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.352411" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.352305" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.352287" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:01:28.352941" level="INFO">${karaf_connection_index} = 10</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:01:28.352616" elapsed="0.000351"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.353336" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.353118" elapsed="0.000243"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.390439" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:01:28.353873" elapsed="0.036683"/>
</kw>
<msg time="2026-04-26T00:01:28.390783" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:01:28.390830" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.353513" elapsed="0.037354"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.437500" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:01:28.391634" elapsed="0.045991"/>
</kw>
<msg time="2026-04-26T00:01:28.437831" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:01:28.437880" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.391046" elapsed="0.046872"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.438270" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.438013" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.437988" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.438841" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.438496" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.439193" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.438981" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.438963" elapsed="0.000346"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:01:28.439347" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.442049" elapsed="0.000151"/>
</kw>
<msg time="2026-04-26T00:01:28.442263" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:01:28.440937" elapsed="0.001461"/>
</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="NOT RUN" start="2026-04-26T00:01:28.442666" elapsed="0.000096"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.443016" elapsed="0.000081"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.440275" elapsed="0.002937"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:01:28.439655" elapsed="0.003650"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:01:28.351963" elapsed="0.091444"/>
</kw>
<msg time="2026-04-26T00:01:28.443503" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.443550" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.351357" elapsed="0.092231"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:01:28.443849" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-04-26T00:01:28.443738" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.443717" elapsed="0.000219"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.444335" elapsed="0.000027"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.444687" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.444762" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:01:28.350650" elapsed="0.094223"/>
</kw>
<msg time="2026-04-26T00:01:28.444971" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.445017" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.346223" elapsed="0.098832"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.445374" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.445130" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.445113" elapsed="0.000338"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-26T00:01:28.346087" elapsed="0.099387"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.450968" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.450858" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.450839" elapsed="0.000198"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.452242" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.452122" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.452101" elapsed="0.000209"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:01:28.452764" level="INFO">${karaf_connection_index} = 12</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:01:28.452446" elapsed="0.000345"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.453150" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.452939" elapsed="0.000236"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.489350" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:01:28.453648" elapsed="0.035947"/>
</kw>
<msg time="2026-04-26T00:01:28.489882" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:01:28.489932" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.453325" elapsed="0.036644"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.521085" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:01:28.490800" elapsed="0.030399"/>
</kw>
<msg time="2026-04-26T00:01:28.521365" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:01:28.521412" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.490320" elapsed="0.031129"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.521839" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.521550" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.521522" elapsed="0.000403"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.522384" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.522064" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.522830" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.522597" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.522577" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:01:28.522948" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.525690" elapsed="0.000158"/>
</kw>
<msg time="2026-04-26T00:01:28.525913" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:01:28.524533" elapsed="0.001520"/>
</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="NOT RUN" start="2026-04-26T00:01:28.526323" elapsed="0.000080"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.526656" elapsed="0.000096"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.523877" elapsed="0.002989"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:01:28.523267" elapsed="0.003664"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:01:28.451797" elapsed="0.075232"/>
</kw>
<msg time="2026-04-26T00:01:28.527123" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.527166" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.451183" elapsed="0.076020"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:01:28.527420" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-04-26T00:01:28.527308" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.527261" elapsed="0.000245"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 2,
close the previous connection. In any case create a new connection
to karaf console for 2, set correct prompt set and login to karaf console.
Store connection index for 2 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.527939" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.528274" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.528346" elapsed="0.000015"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:01:28.450445" elapsed="0.078007"/>
</kw>
<msg time="2026-04-26T00:01:28.528550" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.528595" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.445798" elapsed="0.082833"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.528966" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.528722" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.528704" elapsed="0.000338"/>
</if>
<var name="${index}">2</var>
<status status="PASS" start="2026-04-26T00:01:28.445606" elapsed="0.083459"/>
</iter>
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.534407" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.534296" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.534272" elapsed="0.000203"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.535681" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.535559" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.535542" elapsed="0.000210"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-26T00:01:28.536195" level="INFO">${karaf_connection_index} = 14</msg>
<var>${karaf_connection_index}</var>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-26T00:01:28.535888" elapsed="0.000333"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.536606" level="INFO">${current_connection_index} = 25</msg>
<var>${current_connection_index}</var>
<arg>${karaf_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.536369" elapsed="0.000262"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.577176" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "l "e "r "- "r "e "s "t "- "c "[78Cl "[A[78Cu</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:01:28.537132" elapsed="0.040144"/>
</kw>
<msg time="2026-04-26T00:01:28.577503" level="INFO">${status_write} = PASS</msg>
<msg time="2026-04-26T00:01:28.577550" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "S "t "a "r "t "i "n "g "[C "t "e "s "t "[C "c "o "n "t "r "o "l "...</msg>
<var>${status_write}</var>
<var>${message_write}</var>
<arg>SSHLibrary.Write</arg>
<arg>${command}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.536802" elapsed="0.040785"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.611621" level="INFO">"s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-04-26T00:01:28.578111" elapsed="0.033853"/>
</kw>
<msg time="2026-04-26T00:01:28.612136" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-04-26T00:01:28.612184" level="INFO">${message_wait} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.577774" elapsed="0.034447"/>
</kw>
<if>
<branch type="IF" condition="'${status_write}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to send the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.612537" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.612305" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.612283" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.613090" level="INFO"> "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "t "i "o "n ". "D "e "l "e "t "e "[C "C "a "r "s "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.612776" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.613438" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.613229" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.613212" elapsed="0.000304"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-04-26T00:01:28.613551" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-26T00:01:28.616128" elapsed="0.000147"/>
</kw>
<msg time="2026-04-26T00:01:28.616335" level="INFO">Returning from the enclosing user keyword.</msg>
<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-26T00:01:28.615024" elapsed="0.001444"/>
</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="NOT RUN" start="2026-04-26T00:01:28.616754" elapsed="0.000079"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.617083" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.614382" elapsed="0.002888"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_connection_index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-26T00:01:28.613842" elapsed="0.003490"/>
</kw>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="PASS" start="2026-04-26T00:01:28.535225" elapsed="0.082206"/>
</kw>
<msg time="2026-04-26T00:01:28.617522" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.617565" level="INFO">${message} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.534618" elapsed="0.082984"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-04-26T00:01:28.617809" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-26T00:01:28.617700" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.617659" elapsed="0.000232"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 3,
close the previous connection. In any case create a new connection
to karaf console for 3, set correct prompt set and login to karaf console.
Store connection index for 3 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.618282" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.618614" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.618708" elapsed="0.000016"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-04-26T00:01:28.533937" elapsed="0.084880"/>
</kw>
<msg time="2026-04-26T00:01:28.618912" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:01:28.618956" level="INFO">${output} =  "s "t "- "c "a "r "s "- "p "e "r "f "- "t "e "l "l ". "t "x "t ". "P "u "t "s "[C "D "u "r "i "n "g "[C "I "s "o "l "a "...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.529333" elapsed="0.089660"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.619371" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:01:28.619105" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.619087" elapsed="0.000364"/>
</if>
<var name="${index}">3</var>
<status status="PASS" start="2026-04-26T00:01:28.529199" elapsed="0.090276"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-26T00:01:28.345873" elapsed="0.273635"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:01:28.343529" elapsed="0.276043"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-26T00:01:28.338287" elapsed="0.281347"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.337692" elapsed="0.282018"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-26T00:01:28.333457" elapsed="0.286314"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.620649" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:28.620343" elapsed="0.000350"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:01:28.620739" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:01:28.620890" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${new_leader_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.619977" elapsed="0.000938"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:28.635256" level="INFO">DELETE Request : url=http://10.30.170.188:8181/rests/data/car:cars 
 path_url=/rests/data/car:cars 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:28.635304" level="INFO">DELETE Response : url=http://10.30.170.188:8181/rests/data/car:cars 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:28.635427" level="INFO">${rsp} = &lt;Response [204]&gt;</msg>
<var>${rsp}</var>
<arg>${session}</arg>
<arg>url=${CARURL}</arg>
<arg>expected_status=204</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:01:28.621065" elapsed="0.014388"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:28.648574" level="INFO">GET Request : url=http://10.30.170.188:8181/rests/data/car:cars?content=config 
 path_url=/rests/data/car:cars?content=config 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:28.648894" level="INFO">GET Response : url=http://10.30.170.188:8181/rests/data/car:cars?content=config 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '242'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Request could not be completed because the relevant data model content does not exist",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-26T00:01:28.649122" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>${session}</arg>
<arg>url=${CARURL_CONFIG}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:01:28.635617" elapsed="0.013565"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${DELETED_STATUS_CODES}</arg>
<arg>${rsp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-04-26T00:01:28.649577" elapsed="0.005877"/>
</kw>
<doc>Remove cars from the datastore</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-26T00:01:28.332782" elapsed="0.322971"/>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Stop_Tool">
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.658220" level="INFO">${output} =  </msg>
<var>${output}</var>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="PASS" start="2026-04-26T00:01:28.657867" elapsed="0.000412"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.659188" level="INFO"> </msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.658600" elapsed="0.000686"/>
</kw>
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.660465" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:01:28.660153" elapsed="0.000339"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-04-26T00:01:28.660637" elapsed="0.000242"/>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="PASS" start="2026-04-26T00:01:28.659798" elapsed="0.001148"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.665035" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-26T00:01:28.665404" level="INFO">${output} = ^C[?2004l[?2004h[?2004l
[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-26T00:01:28.661089" elapsed="0.004383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.666660" level="INFO">^C[?2004l[?2004h[?2004l
[?2004h(defaultvenv) [jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.665955" elapsed="0.000854"/>
</kw>
<kw name="Virtual_Env_Deactivate_On_Current_Session" owner="SSHKeywords">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.669426" level="INFO">deactivate</msg>
<arg>deactivate</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-26T00:01:28.668257" elapsed="0.001245"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.670775" level="INFO">[?2004l[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<msg time="2026-04-26T00:01:28.670899" level="INFO">${output} = [?2004l[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-26T00:01:28.669765" elapsed="0.001171"/>
</kw>
<if>
<branch type="IF" condition="${log_output}==${True}">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.671800" level="INFO">[?2004l[?2004h[jenkins@releng-24250-7-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.671426" elapsed="0.000441"/>
</kw>
<status status="PASS" start="2026-04-26T00:01:28.671048" elapsed="0.000866"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.671012" elapsed="0.000941"/>
</if>
<arg>log_output=${True}</arg>
<doc>Deactivates virtual environment.</doc>
<status status="PASS" start="2026-04-26T00:01:28.667449" elapsed="0.004570"/>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="PASS" start="2026-04-26T00:01:28.657383" elapsed="0.014710"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.673231" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:28.672807" elapsed="0.000461"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-26T00:01:28.673335" elapsed="0.000055"/>
</return>
<msg time="2026-04-26T00:01:28.673563" level="INFO">${session} = ClusterManagement__session_3</msg>
<var>${session}</var>
<arg>member_index=${new_leader_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-26T00:01:28.672368" elapsed="0.001229"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:01:28.682224" level="INFO">DELETE Request : url=http://10.30.170.188:8181/rests/data/car:cars 
 path_url=/rests/data/car:cars 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Cookie': 'JSESSIONID=node01novu4pj48vp9qcz45r91fk6f6355.node0', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-26T00:01:28.682583" level="INFO">DELETE Response : url=http://10.30.170.188:8181/rests/data/car:cars 
 status=409, reason=Conflict 
 headers={'Content-Type': 'application/yang-data+json', 'Content-Length': '211'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Data does not exist",
        "error-path": "/car:cars",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<msg time="2026-04-26T00:01:28.682746" level="INFO">${rsp} = &lt;Response [409]&gt;</msg>
<var>${rsp}</var>
<arg>${session}</arg>
<arg>url=${CARURL}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-26T00:01:28.673825" elapsed="0.008959"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.689354" level="INFO">409 : {
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Data does not exist",
        "error-path": "/car:cars",
        "error-type": "protocol"
      }
    ]
  }
}</msg>
<arg>${rsp.status_code} : ${rsp.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.683009" elapsed="0.006413"/>
</kw>
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.696909" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:01:28.696434" elapsed="0.000513"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.698925" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-26T00:01:28.731333" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-26T00:01:28.731624" level="INFO">${stdout} = </msg>
<msg time="2026-04-26T00:01:28.731761" level="INFO">${stderr} = </msg>
<msg time="2026-04-26T00:01:28.731855" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-26T00:01:28.698643" elapsed="0.033261"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.733724" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-04-26T00:01:28.733086" elapsed="0.000741"/>
</kw>
<msg time="2026-04-26T00:01:28.734036" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-04-26T00:01:28.734132" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:01:28.732296" elapsed="0.001884"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.735536" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:01:28.734530" elapsed="0.001066"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.737960" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.737376" elapsed="0.000677"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.738969" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.738373" elapsed="0.000687"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:01:28.740009" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:01:28.739379" elapsed="0.000725"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-26T00:01:28.736564" elapsed="0.003600"/>
</kw>
<status status="PASS" start="2026-04-26T00:01:28.735811" elapsed="0.004389"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.735762" elapsed="0.004582"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-26T00:01:28.740517" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:01:28.740411" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.740393" elapsed="0.000195"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-26T00:01:28.740750" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-26T00:01:28.740639" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-26T00:01:28.740624" elapsed="0.000215"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:01:28.740980" elapsed="0.000022"/>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-04-26T00:01:28.697896" elapsed="0.043204"/>
</kw>
<msg time="2026-04-26T00:01:28.741160" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:01:28.697156" elapsed="0.044067"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="PASS" start="2026-04-26T00:01:28.695588" elapsed="0.045713"/>
</kw>
<msg time="2026-04-26T00:01:28.741351" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:01:28.690523" elapsed="0.050882"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="PASS" start="2026-04-26T00:01:28.690032" elapsed="0.051450"/>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="PASS" start="2026-04-26T00:01:28.689713" elapsed="0.051821"/>
</kw>
<kw name="Store_File_To_Workspace">
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-26T00:01:28.777804" level="INFO">'cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log' -&gt; '/w/workspace/controller-csit-3node-rest-clust-cars-perf-tell-only-chromium/cluster_rest_script.py--controller-rest-clust-cars-perf-tell-txt-Puts-During-Isolation.1777161589.917.log'</msg>
<arg>${source_file_name}</arg>
<arg>${target_file_name}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-04-26T00:01:28.749886" elapsed="0.027980"/>
</kw>
<arg>${out_file}</arg>
<arg>${out_file}</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="PASS" start="2026-04-26T00:01:28.749556" elapsed="0.028373"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-26T00:01:28.778082" elapsed="0.000433"/>
</kw>
<doc>Stop the tool, remove virtual env and close ssh connection towards tools vm.</doc>
<status status="PASS" start="2026-04-26T00:01:28.656911" elapsed="0.121664"/>
</kw>
<doc>Test when a car shard leader is isolated while configuring cars.

Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This test suite requires odl-restconf and odl-clustering-test-app modules.
The script cluster_rest_script.py is used for generating requests for
PUTing car items while the car shard leader is isolated.</doc>
<status status="FAIL" start="2026-04-25T23:59:45.081923" elapsed="103.696694"/>
</suite>
<status status="FAIL" start="2026-04-25T23:40:08.539141" elapsed="1280.240450"/>
</suite>
<statistics>
<total>
<stat pass="14" fail="4" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="7" fail="2" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-rest-clust-cars-perf-tell.txt" id="s1" pass="14" fail="4" skip="0">controller-rest-clust-cars-perf-tell.txt</stat>
<stat name="Restart Odl With Tell Based True" id="s1-s1" pass="2" fail="1" skip="0">controller-rest-clust-cars-perf-tell.txt.Restart Odl With Tell Based True</stat>
<stat name="010 Crud Mdsal Perf" id="s1-s2" pass="7" fail="2" skip="0">controller-rest-clust-cars-perf-tell.txt.010 Crud Mdsal Perf</stat>
<stat name="Puts During Isolation" id="s1-s3" pass="5" fail="1" skip="0">controller-rest-clust-cars-perf-tell.txt.Puts During Isolation</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
